Tomcat报错解决 --- The valid characters are defined in RFC 7230 and RFC 3986怎么解决

本篇内容介绍了“Tomcat报错解决 --- The valid characters are defined in RFC 7230 and RFC 3986怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

我的问题接口是接口中包含 “^”特殊符号,tomcat 8.5.35报如下的错。

Invalid character found in the request target. The valid characters are defined in RFC 3986

从错误日志中看到Error parsing HTTP request header

负责解析http请求的是org.apache.tomcat.util.http.parser.HttpParser,它对请求对URL中对字符做了限制,具体代码如下:
IS_NOT_REQUEST_TARGET[]中定义了一堆not request target

if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || i == 62 || i == 92 || i == 94 || i == 96 || i == 123 || i == 124 || i == 125) {
                IS_NOT_REQUEST_TARGET[i] = true;
            }

转换过来就是以下字符(对应10进制ASCII),也就是URL中不能包含的特殊字符:

  • 键盘上那些控制键:(<32或者=127)

  • 非英文字符(>127)

  • 空格(32)

  • 双引号(34)

  • #(35)

  • <(60)

  • >(62)

  • 反斜杠(92)

  • ^(94)

  • TAB上面那个键,~(96)

  • {(123)

  • }(124)

  • |(125)

自己整了好久,baidu到的全都是这样的:

在conf/catalina.properties中最后添加2行:

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

我是这么加的。

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}^
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

但是我的问题还是没有解决 ,通过查看文档发现了这些个东西:

就是说这个配置只能处理接受的字符为 { } |  ,哭了......

文档地址:https://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html
Tomcat报错解决 --- The valid characters are defined in RFC 7230 and RFC 3986怎么解决 在犹豫是不是要降低版本屈服的时候在文档中搜索了 “^”符号发现了这个。。。于是乎

Tomcat报错解决 --- The valid characters are defined in RFC 7230 and RFC 3986怎么解决

文档地址:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

在conf/server.xml中的<Connector port="8080">节点中,添加2个属性:

relaxedPathChars="|{}[]^,"
relaxedQueryChars="|{}[]^,"

完美解决问题!!! 

“Tomcat报错解决 --- The valid characters are defined in RFC 7230 and RFC 3986怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!