The valid characters are defined in RFC 7230 and RFC 3986 各版本tomcat解决办法

首先出现这个问题是原因高版本的tomcat会严格按照对RFC 3986规范进行访问解析。

RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4种特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段参数包含有有不在RFC3986中的保留字段中,所以会报这个错。

几种解决方法:(这里就不推荐需要去改程序的做法了,从根源上解决才能高枕无忧)

1.换低版本的tomcat (tomcat 7.0.76之前的版本不会出现这个问题)

但是换低版本只是缓兵之计,肯定要从源头上来解决。

2.修改tomcat目录底下的/conf/catalina.properties配置文件,此方法不适用所有版本,可以用下面这个方法来鉴别:

如果catalina.properties中存在着下面这句话,没有就不用尝试了,说明这个版本的tomcat不支持。
#tomcat.util.http.parser.HttpParser.requestTargetAllow=|

如果存在上面这句话就可以尝试去除#来开启该配置,可以在后面添加URL中可能会出现的非保留字段(就是你觉得你的URL中可能存在哪种特殊字符,填进去就完事了)
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}-

但是上面这种做法应该在tomcat7.0.76、tomcat8.0.42、tomcat8.5.12之后这些版本才支持。tomcat9.022版本不支持(亲测)。

tomcat 6.0.41

在这里插入图片描述
tomcat 7.0.73:
在这里插入图片描述
tomcat 7.0.78 :
在这里插入图片描述

tomcat 8.0.30:
在这里插入图片描述

tomcat 8.0.53 :
在这里插入图片描述
tomcat 9.0.11 :
在这里插入图片描述

3.能看到第三个方法估计就是第二个方法不管用了

tomcat目录底下/conf/server.xml
往Connector中添加relaxedQueryChars和relaxedPathChars,直接复制下面的relaxedQueryChars和relaxedPathChars即可。

<Connector port="xxx" relaxedQueryChars="[]|{}-^&#x60;&quot;&lt;&gt;"relaxedPathChars="[]|{}-^&#x60;&quot;&lt;&gt;"/>

注:其中的` " < > 分别代表 \ ` < > 四种符号
第三种方法用tomcat9.0.22 、9.0.11 版本亲测是成功的。

我的tomcat 配置:

在这里插入图片描述

总结:

1.tomcat 7.0.62版本之前对RFC 3986规范不严格所以不会出现这个错误。

2.tomcat7.0.76、tomcat8.0.42、tomcat8.5.12之后的子版本可以尝试修改catalina.properties来解决这个问题。

3.tomcat9的版本就使用修改server.xml来解决这个问题。

4.在网上看到有人分享,说IE浏览器才会出现这个问题。但是我用谷歌之类的浏览器也是会出现的。

原文链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值