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

3 篇文章 0 订阅
1 篇文章 0 订阅

这个坑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

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

如有错误,

还请包涵,

新手上路,

多多指教,

请系好安全带!!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值