前言
最近公司tomcat6.0.22升級到tomcat7.一開始升級到tomcat7.0.65沒有什么問題,公司要求升級到最新的版本,然后升級到tomcat7.0.88.升級后啟動完成沒有問題零酪,但是調一個接口的時候報了The valid characters are defined in RFC 7230 and RFC 3986
尋找解決方案
網(wǎng)上查找解決方案喉童,都是說Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后庭呜,添加了對于http頭的驗證辉饱。
具體來說,就是添加了些規(guī)則去限制HTTP頭的規(guī)范性经窖。
具體解釋可以參考這篇文章(這里謝謝前人的引路哈)
請點擊---文章
原因是這個原因坡垫,我的請求路徑中含有【】梭灿,但是網(wǎng)上說的解決方案,我親身此時我的這個高版本好像并沒有用冰悠。
這里我就簡單總結一下堡妒,網(wǎng)上大部分的解決方案有以下的幾種
- 解決方法1
最輕便的方法,更換tomcat版本屿脐。此方法比較快黍析。 - 解決辦法2:
前端對相應的參數(shù)進行編碼活翩,就是將所有的參數(shù)都進行編碼 - 解決辦法3:
配置tomcat的catalina.properties
添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
針對方法1幌蚊,本公司需要升級到最新的版本匪补,解決安全漏洞文件,所以不考慮西疤。
針對方法2烦粒,因為是升級tomcat,如果修改前端代碼代赁,修改代價太大了扰她。
針對方法3,試過無效
最終解決方案
本人也是方法3在tomcat官方文檔中查到線索芭碍,官網(wǎng)文檔說這個配置已經(jīng)過時了(題外話:還是要英語學得好徒役,看知識沒煩惱,最近準備好好學習學習英語)窖壕,需要使用Connector中relaxedPathChars和relaxedQueryChars屬性可以解決問題忧勿。
找到tomcat/conf/server.xml
找到Connector中增加這兩個配置,配置如下
<Connector port="8080" protocol="HTTP/1.1" relaxedPathChars="[]{}|\^" relaxedQueryChars="[]{}|\^" />