Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

这个坑Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

说说刚才遇到的这个坑,死坑,记录一下,防止下次在遇到

之前基本上没用过tomcat,因为换了公司,所以现在开始使用,今天遇到一个死坑,一脸懵逼 问题来源:
 1. 因为之前使用jfinal-undertow部署项目,所以没有遇到这种情况,今天换成tomcat,那么问题它就来了
 2. 传输的数据格式是json,这个问题出现的原因据网上查看,是tomcat版本的问题(我用的是8.5),Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。

具体的有兴趣的小伙伴可以去官网查看

http://archive.apache.org/dist/tomcat/tomcat-6/
http://archive.apache.org/dist/tomcat/tomcat-7/
http://archive.apache.org/dist/tomcat/tomcat-8/
http://archive.apache.org/dist/tomcat/tomcat-9/

网上查看解决的办法有好几种,例如:

 1. 修改现在使用的tomcat配置文件。
 2. 更换tomcat版本。(绝对不推荐)
 3. 对相应的参数进行编码,就是将所有的参数都进行编码。
 4. 选择另外的参数传递方法,比如post或者localStorage。

本来刚开始想使用第三种对参数就行编码的,本地测试没有问题,但是部署到服务器之后,发现没什么卵用,挣扎了一会也就放弃了。
第二种方式绝对不推荐,解决不了,你就永远使用低版本吧。
最后选择了第一种方式,修改tomcat的配置文件


 1. 找到tomcat目录下的conf文件中的   catalina.properties   和   server.xml  先打开不要问为什么,因为要改这两个配置文件,具体为什么要改这两个文件,因为我就是改了这两个文件就好了,扯多了。。。
 2. 先动  catalina.properties 这个文件,打开之后,拉到文件的最后(或者ctrl+shift+END直接到文件最后)
 3. 把下面这两行复制进去,什么都不要改,不要问为什么,下面告诉你,往下看,复制啊,复制(ctrl+c),然后保存,就可以关闭这个文件了,和他没关系了!

	tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
	org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
	
 4. 在动 server.xml ,打开文件之后,找到 Connector 这个节点,大概68-70行左右(我的配置文件),在后面加上下面的内容,然后保存,一般就可以了
	URIEncoding="UTF-8" relaxedPathCha="|{}[]\" relaxedQueryChars="|{}[]\"   

这个是 catalina.properties的配置
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC_第1张图片
这个是 server.xml 的配置
如图

配置完之后在重新启动tomcat之后,问题就解决了

讲解一下:

1.为什么catalina.properties文件中要那些写?

requestTargetAllow 只能配置|、{、} 允许这三个字符,对于其他的(例如" < > [ \ ] ^ ` { | } .),在请求时,仍然拦截

2.如果使用了 |{} 之外的其他字符那怎么办呢?

那就需要servler.xml中配置了:
	relaxedPathCha="|{}[]\" relaxedQueryChars="|{}[]\"
引号中把你需要的tomcat没有的特殊字符加进去就ok了,根据你需要可以自行增减

本文参考: https://yq.aliyun.com/articles/641394

内容如有错误请联系作者,及时纠正,谢谢

如有错误,

还请包涵,

新手上路,

多多指教,

请系好安全带!!!!

你可能感兴趣的:(java,tomcat,Apache,java,Apache,tomcat,解决方案)