1. 程式人生 > >URL傳輸異常:Invalid character found in the request target

URL傳輸異常:Invalid character found in the request target

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)