Tomcat Http 访问报错:Invalid character found in the request target.

释放双眼,带上耳机,听听看~!

最近在不同电脑上部署环境,因为换了自个电脑进行开发,在 HTTP 请求访问 Action 层的时候一直被拦截,很是苦恼,提示报错如下。

以下是错误以及解决方案,记录一下。

2018-4-18 15:23:10 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.InternalAprInputBuffer.parseRequestLine(InternalAprInputBuffer.java:238)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2555)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2544)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:662)

报错错误原因

这是因为新版 Tomcat 严格按照 RFC 3986规范进行访问解析,而 RFC 3986 规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。传入的参数中有”{“不在 RFC 3986 中的保留字段中,所以会报这个错。

解决方法

  1. 降低 Tomcat 版本
  2. 改变传参方式,或者对传参参数进行编码转化
  3. 修改 Tomcat conf 配置文件
  • 打开 Tomcat/conf 中的 catalina.properties ,搜索
tomcat.util.http.parser.HttpParser.requestTargetAllow=|
  • 去掉注释,并且在后面加入“{}”
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧