(本文档仅供参考)
本地测试在tomcat 9中测试如下URL链接, 测试串(基于产品自带的例子):http://localhost:8080/smartbi/vision/openresource.jsp?paramsInfo=[{"name":"产品名称参数","value":"汽水","displayValue":"汽水"}]&resid=I4028812115561f6c0144956d0aa20117&showtoolbar=true&refresh=true&user=admin&password=admin
发现访问的时候提示“HTTP Status 400 -错误的请求”,不传参打开是正常访问的,这个是为什么?
经验证发现是由于tomcat中间件的问题导致,这应该是一个比较普通存在的问题。
7.0.69+
8.0.39+
8.5.7+
请求的URL在编码后的中文字符串带反斜杠,这是RFC文档中规定的不安全字符,Tomcat在高版本中增加的安全验证,凡是RFC 3986中非URL可携带的字符,都会返回400错误。
这个问题根本都还没有进入到业务层就已经被拦截返回了。
1)配置tomcat/conf下的catalina.properties(tomcat 9测试发现编码后依然存在问题)
添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
2)参数都进行编码(tomcat 9测试发现编码后依然存在问题,可能编码方式不对)
3)使用post方式(可以)
4)降级tomcat(可以),windows一键安装包自带的tomcat版本比较低,没有此问题。
5)cong/server.xml增加 urlencoding编码(测试发现编码后依然存在问题)