前言
最近公司tomcat6.0.22升级到tomcat7.一开始升级到tomcat7.0.65没有什么问题,公司要求升级到最新的版本,然后升级到tomcat7.0.88.升级后启动完成没有问题,但是调一个接口的时候报了The valid characters are defined in RFC 7230 and RFC 3986
寻找解决方案
网上查找解决方案,都是说Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
具体来说,就是添加了些规则去限制HTTP头的规范性。
具体解释可以参考这篇文章(这里谢谢前人的引路哈)
请点击---文章
原因是这个原因,我的请求路径中含有【】,但是网上说的解决方案,我亲身此时我的这个高版本好像并没有用。
这里我就简单总结一下,网上大部分的解决方案有以下的几种
- 解决方法1
最轻便的方法,更换tomcat版本。此方法比较快。 - 解决办法2:
前端对相应的参数进行编码,就是将所有的参数都进行编码 - 解决办法3:
配置tomcat的catalina.properties
添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
针对方法1,本公司需要升级到最新的版本,解决安全漏洞文件,所以不考虑。
针对方法2,因为是升级tomcat,如果修改前端代码,修改代价太大了。
针对方法3,试过无效
最终解决方案
本人也是方法3在tomcat官方文档中查到线索,官网文档说这个配置已经过时了(题外话:还是要英语学得好,看知识没烦恼,最近准备好好学习学习英语),需要使用Connector中relaxedPathChars和relaxedQueryChars属性可以解决问题。
找到tomcat/conf/server.xml
找到Connector中增加这两个配置,配置如下
<Connector port="8080" protocol="HTTP/1.1" relaxedPathChars="[]{}|\^" relaxedQueryChars="[]{}|\^" />
网友评论