Tomcat中URL對於特殊字元編碼問題
阿新 • • 發佈:2019-02-04
URL中有特殊字元如大括號{},^等tomcat會返回400錯誤
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.InternalAprInputBuffer.parseRequestLine(InternalAprInputBuffer.java:235)
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.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2549)
at org.apache.tomcat.util.net .AprEndpoint$SocketProcessor.run(AprEndpoint.java:2538)
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 新版本增加一個特性: 嚴格按照RFT 3986規範定義了Url
Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字元以及所有保留字元(RFC3986中指定了以下字元為保留字元:! * ’ ( ) ; : @ & = + $ , / ? # [ ])
解決辦法:
- 使用低版本的Tomcat
- 對相應的特殊字元進行URL編碼
- 在Tomcat的配置檔案catalina.properties中增加:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
- 將請求引數放在http body裡面