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=|{}

人已赞赏
技术笔记运维笔记

启动Tomcat 异常 严重: Exception loading sessions from

2018-1-22 13:39:00

运维笔记

Nginx访问PHP文件提示File not found / 403 Forbidden

2018-4-21 10:53:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索