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的官网上具有相关的说明,如下图:

Invalid character... request target. The valid characters are defined in RFC 7230 and RFC 3986

               该截图对应的官方地址为:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html