您好,登錄后才能下訂單哦!
tomcat出現異常解決(Invalid character.......)的原因?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
1.情景展示
tomcat 日志時不時會報出如下異常信息,到底是怎么回事?
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.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
頁面無法打開
2.原因分析
意思是:請求頭中包含了 RFC 7230 and RFC 3986規范中定義的非法字符,在這種情況下就會導致頁面報400異常。
原因就是:tomcat的版本過高造成的,網上說,tomcat高于 7.0.73的版本,添加了對于http頭(請求頭)的驗證。
get請求,即問號傳參,就是只有請求頭,沒有請求體
RFC3986文檔規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。
RFC3986中指定了以下字符為保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ]
同時RFC 3986規范在tomcat7.0.73版本中就已經提出了,RFC 7230也是對前者的一些補充或者說是完善,所以在tomcat7.0.73及以上版本都會有這種問題。
說明:這種情況,只在IE瀏覽器下會出現,因為IE瀏覽器不會對中文參數進行編碼,而其它類型的瀏覽器會默認自動對中文進行編碼。
3.解決方案
方法一:降低tomcat版本;
經過測試發現,網上關于tomcat的最高版本要求描述有誤,不是低于7.0.73就可以。
我下載了一個tomcat7.0.70,運行項目后,還是會字符集的錯誤,導致網頁無法打開。
但是,我測了tomcat7.0.61,完美正常運行項目,控制臺不再報錯,網頁可以正常打開了。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。