报错:
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986……
错误原因:
当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。
例如:http://localhost:8080/index.do?{id:123}
寻找解决方案
网上查找解决方案,都是说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=|{}
针对方法3,试过无效
寻找解决方案
网上查找解决方案,都是说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=|{}
最终解决方案
本人也是方法3在tomcat官方文档中查到线索,官网文档说这个配置已经过时了(题外话:还是要英语学得好,看知识没烦恼,最近准备好好学习学习英语),需要使用Connector中relaxedPathChars和relaxedQueryChars属性可以解决问题。
找到tomcat/conf/server.xml
找到Connector中增加这两个配置,配置如下
<Connector port="8080" protocol="HTTP/1.1" relaxedPathChars="[]{}|\^" relaxedQueryChars="[]{}|\^" />