java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
信息 [http-nio-8080-exec-317] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header
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
at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:285)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1045)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
tomcat对http头验证,当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。
查到的这几种解决方法:
1、更换低版本tomcat。(目前用的tomcat8.0.48)
这个就算了,不同版本tomcat存在优化差异,到时候许多配置也会更改。
2、前端http请求的时候对参数进行URL编码处理,理论上是绝对可行的
我都没查出是那个接口报的错,因为对外提供了接口,只在tomcat日志里看到的错误,按个排查太慢了
3、使用 Post 方法提交数据
改动太多了
4、在 conf/catalina.properties 添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
我先试试这种,观察一段时间
另一种没看懂,
修改tomcat/conf/catalina.properties的配置文件 Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target if(IS_CONTROL[i] || 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[i] = true; } 转换过来就是以下字符(对应10进制ASCII看): 键盘上那些控制键:(<32或者=127) 非英文字符(>127) 空格(32) 双引号(34) #(35) <(60) >(62) 反斜杠(92) ^(94) TAB上面那个键,我也不晓得嫩个读(96) {(123) }(124) |(125)
5、使用Connector中relaxedPathChars和relaxedQueryChars属性可以解决问题.找到tomcat/conf/server.xml,在Connector中增加这两个配置. <Connector port="8080" protocol="HTTP/1.1" relaxedPathChars="[]{}|^" relaxedQueryChars="[]{}|^" />
暂未尝试
参考:https://www.cnblogs.com/dygrkf/p/9088370.html
https://www.dazhuanlan.com/2020/03/20/5e7404d60e4b3/