問題
24-Mar-2017 23:43:21.300 INFO [http-apr-8001-exec-77] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header
?Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
?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:239)
?? ?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.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
?? ?at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
?? ?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)
?
項目升級到新的Tomcat8
v8.0.41/ 2017-01-24 08:07
v8.0.42/ 2017-03-16 22:36
就報以上錯誤,換回老的版本
v8.0.39/ 2016-11-14 09:05
問題解決。
?
這又可能是最近官方tomcat更新出問題了...
?
還有一種可能是:
RFC3986文檔規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。
RFC3986中指定了以下字符為保留字符:
!*'();:@&=+$,/?#[]
?
????????不安全字符
????????還有一些字符,當他們直接放在Url中的時候,可能會引起解析程序的歧義。這些字符被視為不安全字符,原因有很多。
?
????->空格Url在傳輸的過程,或者用戶在排版的過程,或者文本處理程序在處理Url的過程,都有可能引入無關緊要的空格,或者將那些有意義的空格給去掉
????->引號以及<>引號和尖括號通常用于在普通文本中起到分隔Url的作用
????->#通常用于表示書簽或者錨點
????->%百分號本身用作對不安全字符進行編碼時使用的特殊字符,因此本身需要編碼
????->{}|\^[]`~某一些網關或者傳輸代理會篡改這些字符
?
詳細信息可參考:http://www.cnblogs.com/interdrp/p/6621559.html
URL編碼的online工具:http://meyerweb.com/eric/tools/dencoder/
?
????????Javascript 中和編解碼相關的幾對函數escape / unescape,encodeURI / decodeURI和encodeURIComponent / decodeURIComponent,可以深入一下。
?