A10的aFleX脚本语言是基于Tcl脚本语言的,下面是一些常见的错误。
aFleX syntax error message “wrong # args: no script following”
注: aFleX 语法错误在Web界面下保存aFlex时显示或者命令行下检查(aflex check script-name)时显示.
这类错误通常在“if”所在行。Tcl脚本语言中,前花括号(“{”)必须与之前的后花括号(“}”)在同一行,而且之间必须有一个空格(“} {”)。
正确:
if { [HTTP::uri] starts_with “/private”)} {
xyz
}
错误(前花括号与上一个后花括号不在同一行):
if { [HTTP::uri] starts_with “/private”)}
{
xyz
}
错误: ( 花括号间无空格)
if { [HTTP::uri] starts_with “/private”)}{
xyz
}
aFleX execution abort errors �C wrong variable name
注: aFleX execution abort error 统计可通过WEB界面(Monitor > Service > aFleX)和命令行(show aflex script-name)查看。
这类错误可能由于变量名中包含“ �C ”。 aFleX 变量可以包含数字、字母和下划线( _ )。
正确: set ip_addr “10.0.0.10″
错误: set ip-addr “10.0.0.10″
aFleX execution abort errors �C HTTP header not present
这类错误可能由于aFleX脚本试图读取在请求或响应头中不存在的HTTP变量。例如,HTTP响应头中不一定总是有 “Location”,这个头通常只出现在服务器重定向应答 (响应代码 301 或 302)。
正确(判断存在该字段后才读取):
if { [HTTP::header exists "Location"]} {
if {[HTTP::header Location] contains “intranet.example.com”} {
xyz
}
错误(不做判断总是读取):
if { [HTTP::header Location] contains “intranet.example.com”} {
xyz
}
aFleX HTTP content rewrite not done
这并非aFleX错误,而是HTTP响应中的内容未成功修改。这个错误在服务器返回压缩内容时发生。为了避免服务器返回压缩内容,除了在服务器关闭压缩外,也可以通过删除HTTP请求头中“Accept-Encoding”字段让服务器认为客户端不支持压缩。
注: 如果为了节约带宽和改善用户响应时间,可以启用负载均衡的压缩功能在负载均衡和客户端之间进行压缩。
解决方案(删除请求头中“Accept-Encoding”字段避免服务器响应压缩):
when HTTP_REQUEST {
HTTP::header remove Accept-Encoding
}
when HTTP_RESPONSE {
HTTP::collect
}
when HTTP_RESPONSE_DATA {
xyz
HTTP::release
}
(R.S.)