tomcat7遇到的問題 原

今天訪問部署的項目,在訪問系統地址時候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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章