您好,登錄后才能下訂單哦!
本篇內容介紹了“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。