Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
原因分析:
翻译过来就是:在请求目标中发现无效字符。有效字符在RFC 7230和RFC 3986中定义。
百度看看:原来这是从7.0开始的高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
解决方案:
既然知道原因了,那我们应该怎么解决这个问题呢?
网上的几种办法:
1、更换低版本的Tomcat。这个办法表面上是可行的,但是这不是属于自欺欺人嘛。因为在实际的项目开发中,你改动Tomcat很可能也要改动JDK版本和其他jar包版本,这会影响到整个项目的正常开发,没理由大家都跟着你改吧。所以pass掉了。
2、在Tomcat的安装目录中,打开conf/catalina.properties,找到末尾的一行。增加两行配置:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
还是不行, 换toncat 这个 8.5 的有问题 ,8.0的就没问题了