tomcat升级 URL中包含了非法字符访问400 错误 The valid characters are defined in RFC 7230 and RFC 3986...

1、因公司项目版本使用JDK及tomcat老旧,造成无法使用很多新引用中间件,所以提出升级JDk,以及tomcat

升级之后访问某些页面时出现一下报错:

问题原因定位到 tomcat7及以上版本会出现:URL中包含了非法字符 

2、解决方式:

 (1)url拦截量少的情况下,可以通过修改请求URL编码转化特殊字符,达到不被tomcat拦截效果

  • encodeURI() 用来encode整个URL,不会对下列字符进行编码:+ : / ; ?&。它只会对汉语等特殊字符进行编码 
  • encodeURIComponent()  用来enode URL中想要传输的字符串,它会对所有url敏感字符进行encode 

  这里需要注意的一点,对于get请求的中文乱码问题,如果你没有在tomcat配置文件中设置编码格式,天真的

  想用request.setCharacterEncoding(“UTF-8”)来在后端设置后端的解码格式,这种方式对于get请求是无效的。

  同时有的小伙伴可能会想我们可以在项目的web.xml中设置编码过滤器。抱歉这种方式对于get请求也是无效的。
 (2)如果拦截情况多则修改tomcat配置文件service.xml如下:

   relaxedQueryChars="[^]"

  这个配置,"[^]"表示请求url中 ^字符不被拦截,如果还有别的符号需要过滤,逗号隔开即可

  

3、另附RFC 3986 文档规定,Url中只允许出现的字符

英文字母(a-z,A-Z)、
 
数字(0-9)、
 
- _ . ~ 4个特殊字符
 
保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]

 

转载于:https://www.cnblogs.com/xiaoyu1994/p/10813223.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值