Jetty-9 warning: badMessage: 400 Illegal character
http://stackoverflow.com/questions/25625410/jetty-9-warning-badmessage-400-illegal-character
后来的后来我知道了这是jetty的一个bug。
先说问题,url参数yyy需要回传encode/decode 。有天收到微信预警信息,ngx每个小时都会有一些400的请求。定位了一下日志,发现中间的一个参数包含了空格,
大概是这样的:
http://xxx.xxx.com?xxx=xxx&yyy=y y&zzz=zzz
开始觉得很简单,一个rewrite规则搞定,但嗖嗖嗖折腾了一大圈,没啥反应,400还是400。
然后在这里发现rewrite是针对uri的 ,其实不能做querystring 的 replace操作,但他这里提供了一个思路实现类似的replace操作,感谢!
http://blog.sina.com.cn/s/blog_40d47c8901019s26.html
所以我在对应的ngx配置文件里location配置项开头加上这句,意思是如果请求query串里有一空格,就把这个空格替换成下划线。
if ( $args ~ '^(.*) (.*)$' ){
set $args $1_$2;
}
重载配置
nginx -s reload
然后世界就清净了,很久没有再收到400的预警了。
$args 代表的就是querystring
~ 匹配
'^(.*) (.*)$' 匹配那些中间有一个空格的字符串,若符合条件则前一半可用$1取到,后一半可用$2取到。
每天要和小伙伴超神一把的程序员,会写python,对ngx感兴趣。