解决further occurrences of HTTP header parsing errors...;Invalid character found in the request target

最近在公司运行项目调用其他工程接口时TOMCAT7 报出这样的一个错误

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 RFC3986

请求接口类型:GET 方式

请求接口路径:localhost:8080/xxx.do?action=queryXXX&list=[{...}]

运行环境:Tomcat7

在网上查了很久的资料归纳以下解决方法和原因

 

原因1:可能是请求路径过长导致

具体每个浏览器的请求长度可以参考这篇文章:《url get与post 请求长度限制

解决方法:GET请求改为POST请求

 

原因2:路径中含有非法字符

如果你的console报错中含有标 红色 部分的错误 并且TOMCAT版本是6以上 就需要注意该项,红色部分意思是 “请求字符不是RFC7230 - RFC3986 的有效字符” 。

tomcat对URL做出了更严格的限制RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。RFC3986中指定了以下字符为保留字符:“!*'();:@&=+$,/?#[]”。还有一些字符,当他们直接放在Url中的时候,可能会引起解析程序的歧义。这些字符被视为不安全字符,原因有很多。

 

解决方法 1:官方文档解决方案是 《https://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html》 这篇文章底部给出解决方案:

配置tomcat的catalina.properties 将 tomcat.util.http.parser.HttpParser. requestTargetAllow 属性 设置为 tomcat.util.http.parser.HttpParser. requestTargetAllow = |{}

解决方法2:将参数进行编码  "localhost:8080/xxx.do?action=queryXXX&" + encodeURIComponent(list=[{...}])

解决方法3:换成更低版本的Tomcat 如Tomcat6,Tomcat8.0.3以下

 

 

原因3:未知原因

解决方法1:修改Tomcat的server.xml, 在<Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"    redirectPort="8443" />的配置中增加maxHttpHeaderSize的配置

解决方法2:修改端口号

解决方法3:https 改为http 或者 http 改为 https

解决方法4:更换其他版本tomcat

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值