解決辦法:修改tomcat配置文件 conf/catalina.properties
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
目錄:
一、問題描述
二、解決方案
一、問題描述
有時候,我們製作的填報表在本地帆軟自帶環境中運行一切正常。但部署到服務器Tomcat環境後,選擇報表下拉框時,彈出“獲取數據發生錯誤” 報錯信息。
檢查Tomcat運行日誌,(部分截圖)如下:
信息:Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
二、解決方案
A):據資料得知,最新的Tomcat6、7、8、9都有類似問題。
原因是由於Tomcat新版本增加了一個新特性:就是嚴格按照 RFC 3986規範進行訪問解析,而 RFC 3986規範定義了Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符(RFC3986中指定了以下字符爲保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]),花括號{} 123和125不包含在列。
而在URL中如果出現非法字符(非上述內容),就需要對非法字符進行編碼再訪問。由於帆軟沒有對花括號{}進行編碼,所以才導致訪問報錯!
解決辦法:修改tomcat配置文件 conf/catalina.properties
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}