Invalid character... request target. The valid characters are defined in RFC 7230 and RFC 3986
问题背景:
为了应对最近Tomcat重大漏洞的解决问题,tomcat8需要升级至最新tomcat8.5.51才可以修复该漏洞,但是我们系统运行在该版本上,会出现一个路径中有异常字符的报错,报错内容如下:
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
出现该问题的原因:
Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,在http解析时做了严格限制。
RFC3986文档规定,请求的Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。
而我们请求地址中由于路径中有特殊符号,导致在默认的情况下,地址的路径写法违反了RFC3986文档规定,导致出现了上述的报错。
解决方法:
方案一:
降低tomcat的版本,将相关的tomcat的版本降低到Tomcat在 7.0.73, 8.0.39, 8.5.7 版本前,就可以避免了这个问题,该方法可以一了百了的解决问题,但是问题是很多老版本的tomcat存在重大漏洞,故在本次任务中该方案并不适用。
方案二:
到tomcat的conf目录下,找到server.xml文件,
然后在<Connector>标签中假如两个属性,内容如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
relaxedPathChars="[]^{|}"
relaxedQueryChars="[]^{|}"
/>
至此,我们启动tomcat后,进入登录界面,点击登录按钮以后,就不会出现“undefined”的报错了,就可以正常的登录了。
解决该问题的依据在tomcat的官网上具有相关的说明,如下图:
该截图对应的官方地址为:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html