這個異常時由於Tomcat 9不支持請求格式出現「{」等非法字符的問題java
由於tomcat版本問題遇到的坑,記錄一下。apache
今天因爲要測試一下訂單詳情頁的異步查詢,在本地起了一個服務,發送的請求是:api
http://sellerorder.mogujie.com:8080/api/order/detail4seller?data={%22shopOrderId%22:%2224296908588336%22,%22orderPlatFormCode%22:%22PC%22}tomcat
按理說應該沒啥問題,可是報以下的錯:服務器
22-Aug-2018 11:58:23.262 信息 [http-nio-8080-exec-4] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
Note: further occurrences of HTTP request 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.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)app
能夠看到是說有非法字符,因而去度娘找解決辦法,找到了解決辦法的博客以下:異步
https://blog.csdn.net/testcs_dn/article/details/71716829測試
修改後重啓服務器發現仍是沒有解決,因而查資料,發現有多是tomcat版本的問題,因而把tomcat 9 換成了tomcat 8,spa
將tomcat 8的conf路徑下的 catalina.properties 文件進行修改,在最後加入一句:tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} .net
容許tomcat接收「{」這樣的特殊字符,重啓後問題解決。
有不少狀況下,在嘗試不少辦法後仍沒法解決的話,試着換一下tomcat的版本,儘可能不要用高版本的tomcat,仍是用相對穩定一些的版本,否則就會有坑。