本篇内容介绍了“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
在犹豫是不是要降低版本屈服的时候在文档中搜索了 “^”符号发现了这个。。。于是乎
文档地址: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怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。