做項目的時候碰到一個問題,就是Tomcat在處理含有|,{,}的字符的Url時候,發(fā)現(xiàn)請求沒有到達指定的Controller上面,而在Access_log中寫入了get null null 400的錯誤信息,從網(wǎng)上也翻了幾個資料最終確定是tomcat的一個問題(個人覺得也是一個缺陷)
問題的由來
Tomcat根據(jù)rfc的規(guī)范Url中不能有類似|,{,}等不安全字符串,但在實際的操作中有時為了數(shù)據(jù)完整性和加密的方式都需要有|,{,}出現(xiàn),這樣的話Tomcat會直接告訴客戶端Bad Request.
對于這個問題,很多人也提出很多不同的看法:https://bz.Apache.org/bugzilla/show_bug.cgi?id=60594,經(jīng)過修改,最終Tomcat把權(quán)限開放出來,通過tomcat.util.http.parser.HttpParser. requestTargetAllow這個配置選項,允許不安全字符的出現(xiàn)。Tomcat詳細(xì)配置
解決方法
經(jīng)過幾次探索,有以下幾個方法能夠解決這個問題:
- 把請求的Url進行編碼,這個對源頭進行處理,來規(guī)避這個問題,如果是第三方來調(diào)用的url就無能無力。
- 修改Tomcat的配置文件(Tomcatconfcatalina.properties),適用tomcat 7以上的版本
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
3.使用其它服務(wù)器進行中轉(zhuǎn),比如IIS和Apache

(本文完)