有的时候你会发现使用不同的Tomcat部署项目,在项目测试环境中正常,部署到Tomcat中就出现了400的错误,这个情况就无法理解了。 解决方案: 新出的tomcat的coyote对http头request URL解析更严格了
if ((IS_CONTROL != 0) || (i > 127) || (i == 32) || (i == 34) || (i == 35) || (i == 60) || (i == 62) || (i == 92) || (i == 94) || (i == 96) || (i == 123) || (i == 124) || (i == 125)) {
IS_NOT_REQUEST_TARGET = true;
}
花括号{} 123和125不能包含在URL中,旧版jar包没有对花括号encode,新版jar已经没有这个问题。
如果不升级jar包,就只能用旧版的tomcat来解决这个问题了。
可用的版本有:
Tomcat 9.0.0.M11及以下
Tomcat 8.5.6及以下
Tomcat 8.0.38及以下
Tomcat 7.0.72及以下
Tomcat 6.0.47及以下
这是一个8.5.5的免安装版:待更新
根据tomcat的Changelog,URL限制使用花括号的版本是:
Tomcat 6.0.48及以上
Tomcat 7.0.73及以上
Tomcat 8.0.39及以上
Tomcat 8.5.7及以上
Tomcat 9.0.0.M12及以上
|