RFC 7230 and RFC 3986 各版本tomcat解决方法

news/2024/11/29 15:53:35/

项目从原先的jdk1.6+tomcat6(6.0.26) 升级为jdk1.8+tomcat9(9.022)。升级完后在tomcat日志中发现经常会出现RFC 7230 and RFC 3986 这个错误。于是在网上搜集资料,做个总结。

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

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

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

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

   但是换低版本只是缓兵之计,肯定要从源头上来解决。而且在工作中想换项目的tomcat版本往往不是一个人能决定的。

2.修改tomcat目录底下的/conf/catalina.properties配置文件

想知道你所用的tomcat版本适不适用这个方法的话,可以用下面这个方法来鉴别:

查看catalina.properties文件中是否存在着下面这句话,没有就不用尝试了,说明这个版本不支持。

#tomcat.util.http.parser.HttpParser.requestTargetAllow=|

如果存在上面这句话就可以尝试去除#来开启该配置,然后在后面添加URL中可能会出现的非保留字符(就是你觉得你的URL中可能存在哪种特殊字符填进去就完事了

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}-

注:上面的{}-就是你填入想要非保留字符。

上面这种做法应该在tomcat7.076、tomcat8.042、tomcat8.512之后这些子版本才支持。tomcat9.022版本不支持(亲测)

3.修改tomcat目录底下的/conf/server.xml  (能看到第三个方法估计就是前二个方法不管用了,没错,我就是)

  打开tomcat目录底下/conf/server.xml

  往Connector中添加relaxedQueryChars和relaxedPathChars,直接复制下面的relaxedQueryChars和relaxedPathChars即可。

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

注:其中的&#x60; &quot; &lt; &gt;   分别代表  \  `   <  >   四种符号

第三种方法用tomcat9.022版本亲测是成功的。

总结:

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

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

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

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

5.感谢评论区的大神做的补充:tomcat6 (6.0.51,6.0.48)也会出现这个问题,是因为CVE-2017-5647这个漏洞,详细可以看看评论区,里面有从源码解释为什么该版本不支持。

6.在网上看到改成post请求也能解决,不过涉及到改程序了,这里不做总结。


http://www.ppmy.cn/news/416293.html

相关文章

The HTTP header line [connection : Keep-alive] does not conform to RFC 7230 and has been ignored

在测试一个程序的时候&#xff0c;出现了“The HTTP header line [connection : Keep-alive] does not conform to RFC 7230 and has been ignored”这个错误&#xff1b;经搜索关键字 RFC 7230发现是tomcat高版本中&#xff0c;严格按照规范解析。 百度了一下解决方案&#x…

解决 Tomcat 7230 and 3986 错误异常

今天&#xff0c;我们来讲一下&#xff0c;tomcat 版本过高而引发的7230和3986 的错误 &#xff0c;这个错误是我更换了浏览器之后所引发的异常错误信息&#xff0c;所以就在这里跟大家讲一下&#xff1a; 一、原因浏览器从谷歌更换成内部浏览器&#xff0c; 图示&#xff1a;…

从7290转为7230

好久没有写博客了,一是不知道该写什么,二是没有时间,买房子、结婚、加班。劳累的生活&#xff01;转入正题&#xff0c;原来的blackberry送人了&#xff0c;五月份又入手了一台全新7230。 7230和7290从外观上非常接近&#xff0c;外观上最大的不同点就是&#xff1a;1、背光按…

The valid characters are defined in RFC 7230 and RFC 3986问题

最近在ssm实践项目中遇到了The valid characters are defined in RFC 7230 and RFC 3986这个问题&#xff0c;折腾了两天时间终于搞定了&#xff0c;记录一下心得。 1、首先贴出报错日志&#xff1a; 09-Apr-2019 14:55:11.427 信息 [http-nio-8089-exec-8] org.apache.coyote…

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

问题描述 今天在测试接口的是否使用tomcat启动服务&#xff0c;然后通过get请求去测试接口&#xff0c;页面返回报的错误是400。 tomcat中错误如下图所示&#xff1a; 请求参数为 location[{"lng":108.871597,"lat":34.194412}] 很明显&#xff0c;在loca…

IE上的The valid characters are defined in RFC 7230 and RFC 3986坑

前言 日常开发中经常遇到一些莫名其妙的小问题&#xff0c;例如即将上线的项目在线上异常报错&#xff0c;但是在本地确可以正常运行。往往这猝不及防的小惊喜&#xff0c;真是让我们猿猿欲哭无泪啊。这里简单总结一下在IE浏览器上遇到的一个小坑&#xff0c;之前就因为这个小…

IE上的 The valid characters are defined in RFC 7230 and RFC 3986 坑的解决方法

前言 日常开发中经常遇到一些莫名其妙的小问题&#xff0c;例如即将上线的项目在线上异常报错&#xff0c;但是在本地确可以正常运行。往往这猝不及防的小惊喜&#xff0c;真是让我们猿猿欲哭无泪啊。这里简单总结一下在IE浏览器上遇到的一个小坑&#xff0c;之前就因为这个小…

The HTTP header line [http Method: POST] does not conform to RFC 7230 and has been ignored

今天遇到一个比较基础&#xff0c;又没遇到过的问题。 这是使用httpClient调用接口的时候报的错误&#xff0c;错误就是http的请求头不正确。但是调用接口的是共用方法&#xff0c;以前都是正常用的&#xff0c;怎么这次就不行了呢&#xff1f;换了一个请求方法就好了。 话不多…