URL傳輸異常:Invalid character found in the request target
阿新 • • 發佈:2019-01-01
1.異常詳情
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:1028) 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)
2.出現原因
傳輸URL中出現不安全字元:
自Tomcat7之後對URL引數做了規範限制,必須遵循RFC 7230 and RFC 3986規範,對於非保留字字元必須做轉義操作。不安全字元:某些字元直接放在URL中的時候,可能會引起解析程式的歧義。這些字元被視為不安全字元。例如:
- 空格:Url在傳輸的過程,或者使用者在排版的過程,或者文字處理程式在處理Url的過程,都有可能引入無關緊要的空格,或者將那些有意義的空格給去掉。
- 引號以及<>:引號和尖括號通常用於在普通文字中起到分隔Url的作用
- #:通常用於表示書籤或者錨點
- %:百分號本身用作對不安全字元進行編碼時使用的特殊字元,因此本身需要編碼
- {}|\^[]`~:某一些閘道器或者傳輸代理會篡改這些字元
3.解決方案
對含有不安全字元的URL進行轉義
encodeURI(URL)