程序开发 ·

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中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。传入的参数中有"{"不在RFC3986中的保留字段中,所以会报这个错。

解决方法:

1、降低Tomcat版本

2、改变传参方式,或者对传参参数进行编码转化

3、修改Tomcat conf配置文件

打开Tomcat/conf中的catalina.properties,搜索

tomcat.util.http.parser.HttpParser.requestTargetAllow=|

去掉注释,并且在后面加入“{}”

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
PS:最近忙成狗,努力吧。

参与评论