Tomcat 報 The valid characters are defined in RFC 7230 and RFC 3986


問題

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,可以深入一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM