tomcat 请求出现RFC 7230 and RFC3986的错误,解决办法

1.在tomcat的server.xml的Connector中增加下面俩属性

relaxedPathChars
relaxedQueryChars

在这里插入图片描述

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URLEconding="UTF-8"
               URIEconding="UTF-8" 
               useBodyEncodingForURI="true"
               redirectPort="8443" 
               relaxedPathChars="|{}[],%" 
               relaxedQueryChars="|{}[],%"/>

可以解决对于这些特殊字符的解析,如果想要增加新的直接增加即可

2.在js中使用encodeURI方法

直接使用encodeURI方法对url进行处理即可,在我这边使用的情况下,适用于所有情况.

3.修改tomcat的jar包

以上两种情况是我在网上大量搜索找出来的还算行之有效的方法,其他的进行修改都是无济于事,但是我们这边的需求是url中会含有中文。
方法一将会不适用,不可能把所有的汉字都加进去,而且我也没有进行尝试中文加入relaxedPathCharsrelaxedQueryChars中是否有效,
方法二虽然比较实用,而且可以对付所有情况,但是需要修改大量的js的文件,是真的烦啊

因此,我尝试着去看了一下tomcat对于这部分的源码,找到了对这部分的匹配和校验
在这里插入图片描述
具体位置在Http11InputBuffer类中的parseRequestLine的方法下,有兴趣的可以试着下载源码,调试一下看看效果,于是我就
在这里插入图片描述
直接注释掉,然后找到编译的class
在这里插入图片描述
复制进tomcat的jar中,jar包在
在这里插入图片描述tomcat的lib文件夹下的tomcat-coyote.jar
然后,完美运行
这是我已经修改好得tomcat-coyote.jar

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值