tomcat在高版本会出现“ 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义”这样的报错。
所谓高版本我大概查了下,从tomcat8开始,就会严格按照RFC 3986规范解析地址。该规范只允许包含 a-zA-Z 0-9 - _ . ~ 以及所有保留字符 ! * ’ ( ) ; : @ & = + $ , / ? # [ ] ,这样一来,如果请求中出现规范以外的字符就会报错。
其中包括汉字unicode编码后的字符,因为带有“%”。
这个问题在360极速模式、chrome浏览器、edge浏览器中不明显,在360的兼容模式下会出现。
解决方案:
在tomcat配置文件中,找到tomcat/conf配置中的server.xml,找到这一行:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>
在里面加上:relaxedPathChars="|{}[],%" relaxedQueryChars="|{}[],%",像这样:
然后重启tomcat,就可以了。