这个坑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的配置
这个是 server.xml 的配置
配置完之后在重新启动tomcat之后,问题就解决了
讲解一下:
1.为什么catalina.properties文件中要那些写?
requestTargetAllow 只能配置|、{、} 允许这三个字符,对于其他的(例如" < > [ \ ] ^ ` { | } .),在请求时,仍然拦截
2.如果使用了 |{} 之外的其他字符那怎么办呢?
那就需要servler.xml中配置了:
relaxedPathCha="|{}[]\" relaxedQueryChars="|{}[]\"
引号中把你需要的tomcat没有的特殊字符加进去就ok了,根据你需要可以自行增减
本文参考: https://yq.aliyun.com/articles/641394