前言
最近公司tomcat6.0.22升級(jí)到tomcat7.一開始升級(jí)到tomcat7.0.65沒有什么問題,公司要求升級(jí)到最新的版本,然后升級(jí)到tomcat7.0.88.升級(jí)后啟動(dòng)完成沒有問題,但是調(diào)一個(gè)接口的時(shí)候報(bào)了The valid characters are defined in RFC 7230 and RFC 3986
尋找解決方案
網(wǎng)上查找解決方案,都是說Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了對(duì)于http頭的驗(yàn)證。
具體來說,就是添加了些規(guī)則去限制HTTP頭的規(guī)范性。
具體解釋可以參考這篇文章(這里謝謝前人的引路哈)
請(qǐng)點(diǎn)擊---文章
原因是這個(gè)原因,我的請(qǐng)求路徑中含有【】,但是網(wǎng)上說的解決方案,我親身此時(shí)我的這個(gè)高版本好像并沒有用。
這里我就簡(jiǎn)單總結(jié)一下,網(wǎng)上大部分的解決方案有以下的幾種
- 解決方法1
最輕便的方法,更換tomcat版本。此方法比較快。 - 解決辦法2:
前端對(duì)相應(yīng)的參數(shù)進(jìn)行編碼,就是將所有的參數(shù)都進(jìn)行編碼 - 解決辦法3:
配置tomcat的catalina.properties
添加或者修改:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
針對(duì)方法1,本公司需要升級(jí)到最新的版本,解決安全漏洞文件,所以不考慮。
針對(duì)方法2,因?yàn)槭巧?jí)tomcat,如果修改前端代碼,修改代價(jià)太大了。
針對(duì)方法3,試過無(wú)效
最終解決方案
本人也是方法3在tomcat官方文檔中查到線索,官網(wǎng)文檔說這個(gè)配置已經(jīng)過時(shí)了(題外話:還是要英語(yǔ)學(xué)得好,看知識(shí)沒煩惱,最近準(zhǔn)備好好學(xué)習(xí)學(xué)習(xí)英語(yǔ)),需要使用Connector中relaxedPathChars和relaxedQueryChars屬性可以解決問題。
找到tomcat/conf/server.xml
找到Connector中增加這兩個(gè)配置,配置如下
<Connector port="8080" protocol="HTTP/1.1" relaxedPathChars="[]{}|\^" relaxedQueryChars="[]{}|\^" />