1. 程式人生 > >Tomcat中URL對於特殊字元編碼問題

Tomcat中URL對於特殊字元編碼問題

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中指定了以下字元為保留字元:! * ’ ( ) ; : @ & = + $ , / ? # [ ])

解決辦法:

  1. 使用低版本的Tomcat
  2. 對相應的特殊字元進行URL編碼
  3. 在Tomcat的配置檔案catalina.properties中增加:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
  1. 將請求引數放在http body裡面