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

news/2024/11/29 20:48:46/

首先出现这个问题是原因高版本的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浏览器才会出现这个问题。但是我用谷歌之类的浏览器也是会出现的。

原文链接


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

相关文章

The valid characters are defined in RFC 7230 and RFC 3986-Tomcat解决方案

问题: 发生场景: Tomcat 从 7.0.57 升级到 8.5.65 之后, 应用程序访问出现。请求URL地址中包含了JSON格式的参数。原因及解析: 请求地址包含了无效字符, 有效字符的定义是在 RFC 7230 和RFC 3986中定义的。 RFC 3986 规定, URL 只允许包含字母,数字以及四个特殊字符(-…

解决 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义 的问题

前言 本人博客园&#xff1a;https://www.cnblogs.com/lzj523/ 本文博客园原文章&#xff1a;https://www.cnblogs.com/lzj523/p/14283076.html 今天因解决漏洞而更新了Tomcat&#xff0c;运行网站就报错 类型 异常报告 消息 在请求目标中找到无效字符。有效字符在RFC 7230…

解决 tomcat: the valid characters are defined in RFC 7230 and RFC 3986

文件下载功能&#xff0c;本地跑是正常的&#xff0c;部署到服务器后下载报错 大概意思为&#xff1a;在请求目标中找到无效字符&#xff0c;有效字符在RFC 7230和RFC 3986中定义。 就是说http请求的url中有非法字符&#xff0c;我请求的url中有&#xff1f;&#xff0c;\&…

spring boot 解决Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986 的问题

tomcat 8.0以后对请求URL做了严格的过滤 就是严格按照 RFC 3986规范进行访问解析&#xff0c;而 RFC 3986规范定义了Url中只允许包含英文字母&#xff08;a-zA-Z&#xff09;、数字&#xff08;0-9&#xff09;、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保…

The valid characters are defined in RFC 7230 and RFC 3986

今天发现一个问题&#xff0c;项目在我本地以及正式环境单机访问都是没有问题的&#xff0c;但是通过nginx统一访问&#xff0c;就会报如下错误&#xff1a;org.apache.tomcat.util.http.parser.HttpParser.<clinit> Character ["] is not allowed and will continu…

接口报错:The valid characters are defined in RFC 7230 and RFC 3986

1.起始&#xff1a;线上突然收到用户反馈&#xff0c;一个文件上传合并接口报错&#xff0c;其他文件无异常&#xff0c;该文件经多次重试仍无法成功 2.排查&#xff1a;查看前端nginx日志无异常&#xff0c;查看后台日志发现该用户使用该接口有报错情况 3.具体报错&#xff1a…

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

项目从原先的jdk1.6tomcat6(6.0.26) 升级为jdk1.8tomcat9(9.022)。升级完后在tomcat日志中发现经常会出现RFC 7230 and RFC 3986 这个错误。于是在网上搜集资料&#xff0c;做个总结。 首先出现这个问题是原因高版本的tomcat会严格按照对RFC 3986规范进行访问解析。 RFC 3986规…

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…