我是靠谱客的博主 无情香水,最近开发中收集的这篇文章主要介绍Spring boot The valid characters are defined in RFC 7230 and RFC 3986,解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

错误的原因:

Tomcat8.5,当Get请求中包含了未经编码的中文字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了。

 

tomcat3986规范:

RFC 3986文档对Url的编解码问题做出了详细的建议,指出了哪些字符需要被编码才不会引起Url语义的转变,以及对为什么这些字符需要编码做出了相应的解释。

RFC 3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(! * ’ ( ) ; : @ & = + $ , / ? # [ ])。

还有一些字符当直接放在Url中的时候,可能会引起解析程序的歧义,这些字符被视为不安全字符。

空格:Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉。
引号以及<>:引号和尖括号通常用于在普通文本中起到分隔Url的作用
#:通常用于表示书签或者锚点
%:百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
{}|^[]`~:某一些网关或者传输代理会篡改这些字符
 

解决办法1:不变更GET

如果你是用war的方式放在Tomcat下面,那么你可以修改:TOMCAT_HOME/conf/confcatalina.properties

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

解决办法2:变更GET ——>POST

这个异常只有GET请求才会发生

解决办法3:前端请求对URL编码

这个异常只有GET请求带了某些参数才会发生这种情况,如带了这个: {}

解决办法4:修改容器tomcat--->jetty

假如你是使用 java -jar ***.war  或者  java -jar ****.jar

那么我的建议是,不去变更代码了。我们只需要把Springboot依赖的容器从tomcat变更成jetty就可以了

修改 pom.xml

<!-- 默认使用的Tomcat容器 -->
<dependency>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

修改后

<!-- 默认使用的Tomcat容器 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- GET请求会包含{}字符,因此我们舍弃Tomcat容器,显性指定改用jetty -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

 

部分资料取自:https://blog.csdn.net/youanyyou/article/details/79689716

 

最后

以上就是无情香水为你收集整理的Spring boot The valid characters are defined in RFC 7230 and RFC 3986,解决办法的全部内容,希望文章能够帮你解决Spring boot The valid characters are defined in RFC 7230 and RFC 3986,解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部