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 – wrong variable name

注: aFleX execution abort error 统计可通过WEB界面(Monitor > Service > aFleX)和命令行(show aflex script-name)查看。

这类错误可能由于变量名中包含“ – ”。 aFleX 变量可以包含数字、字母和下划线( _ )。

正确:   set ip_addr “10.0.0.10″  
错误:   set ip-addr “10.0.0.10″


aFleX execution abort errors – 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.)