今天项目做迁移,想换一个高一点版本的tomcat,就出现了问题,记录一下。
分析原因:
导致上述问题是因为tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请求参数)必须做转义操作,否则会抛出Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986错误信息。
可以有三种方法解决:
方法一:将json数据进行urlencode编码;
方法二:降低tomcat版本;
方法三:配置tomcat/conf下的catalina.properties
将tomcat.util.http.parser.HttpParser.requestTargetAllow=|修改为
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
建议:有时候项目已经运行很久了,如果贸然修改代码,或者降低tomcat的版本,或造成很大的问题或者测试工作量,所以建议使用方法三,从tomcat的层面解决问题。