解决java程序返回HTTP505
nginx转发给java程序的接口返回505状态码,表示“HTTP版本不受支持“,实际上大多数情况都不是这个原因,而是url里包含了没有转义的空格。
比如请求行如下:
POST /api/v2/exchange/banner?ts=1567662987906&os=android&ov=Android 6.0.1&nt=wifi&sc=574*360&sg=2e9c8d43f39452981f512e8a61a2c83e HTTP/1.1
在querystring
中ov
由于某种原因里面有未转义的空格,则后端无法识别此请求行,误认为是不支持的版本。正常情况下空格应该转义成%20
。
前端发版要审核,所以只能先在后端动手解决。说是java程序返回505,其实还是得在nginx层面改。
在对应的location
里加上对args
的转换即可。
if ($args ~ '^(.*) (.*)$'){
set $args $1%20$2;
}
PS:
这种情况一直都存在,但是nginx转发给php-fpm的请求就没有问题。猜测php-fpm针对这种情况重新加了转义,而springboot内置的tomcat没有这么吊吧。