一、因公司项目版本使用JDK及tomcat老旧,形成没法使用不少新引用中间件,因此提出升级JDk,以及tomcatnode
升级以后访问某些页面时出现一下报错:web
问题缘由定位到 tomcat7及以上版本会出现:URL中包含了非法字符 后端
二、解决方式:tomcat
(1)url拦截量少的状况下,能够经过修改请求URL编码转化特殊字符,达到不被tomcat拦截效果编码
这里须要注意的一点,对于get请求的中文乱码问题,若是你没有在tomcat配置文件中设置编码格式,天真的url
想用request.setCharacterEncoding(“UTF-8”)来在后端设置后端的解码格式,这种方式对于get请求是无效的。spa
同时有的小伙伴可能会想咱们能够在项目的web.xml中设置编码过滤器。抱歉这种方式对于get请求也是无效的。
(2)若是拦截状况多则修改tomcat配置文件service.xml以下:code
relaxedQueryChars="[^]" xml
这个配置,"[^]"表示请求url中 ^字符不被拦截,若是还有别的符号须要过滤,逗号隔开便可中间件
三、另附RFC 3986 文档规定,Url中只容许出现的字符
英文字母(a-z,A-Z)、
数字(0-9)、
- _ . ~ 4个特殊字符
保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]