今天訪問部署的項目,在訪問系統地址時候tomcat報錯了:
十月 22, 2018 1:29:42 下午 org.apache.coyote.http11.AbstractHttp11Processor process
信息: 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 at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:189) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1000) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
我的tomcat版本是:apache-tomcat-7.0.91 。
我記得我之前好隱約遇到這個問題,但是忘記修改哪裏了,今天又遇到了,趕緊記錄下。
原因
最新的tomcat新版本增加了一個新特性,就是嚴格按照 RFC 3986規範進行訪問解析,而 RFC 3986規範定義了Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符(RFC3986中指定了以下字符爲保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
根據(https://bz.apache.org/bugzilla/show_bug.cgi?id=60594) ,從以下版本開始,有配置項能夠關閉/配置這個行爲:
8.5.x系列的:8.5.12 onwards
8.0.x系列的:8.0.42 onwards
7.0.x系列的:7.0.76 onwards
解決方法
1、降低tomcat版本,降到7.0.73版本以下,我就降低到apache-tomcat-7.0.69。
2、修改tomcat源碼。
3、修改自己系統地址,對get請求進行URL編碼,可以使用 JavaScript 中的 encodeURIComponent() 函數。
4、設法把get請求變爲post請求。
5、在 conf/catalina.properties 中最後添加一行:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
#並且解封此處,添加不過濾的字符
tomcat.util.http.parser.HttpParser.requestTargetAllow=|_@!{}
這裏需要說明下:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|。這個屬性是用來決定是否限制不經過編碼的花括號({})的,默認是注掉的,也就是說默認是限制的。如果我們不需要這種限制,直接將該屬性開啓,並且在“|”後添加“{}”即可。我本次解決的方法就是把該屬性打開,使其不對不編碼的花括號進行限制。apache-tomcat-7.0.73版本及其之後版本添加了此配置,並且此選項是可選的。
參考資料:
https://blog.csdn.net/testcs_dn/article/details/71716829
https://blog.csdn.net/sujiacheng_123/article/details/75331497
http://www.cnblogs.com/wsygdb/p/7661220.html
https://www.jianshu.com/p/9e143c4921d3
https://blog.csdn.net/weixin_35196256/article/details/78090302
https://bz.apache.org/bugzilla/show_bug.cgi?id=60594