url中含中文導致The valid characters are defined in RFC 7230 and RFC 3986解決辦法
阿新 • • 發佈:2018-12-26
報錯如下:
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:471) ~[tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:667) ~[tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798) [tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434) [tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.11.jar:8.5.11] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_45] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.11.jar:8.5.11] at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
自己的程式碼如下:
function downloadLog(logName){
location.href=basePath + "/demp/common/downloadDeviceLog.do?logName="+logName;
}
檢查之後發現是因為url傳的引數中有中文,通過查詢在url中加了encodeURI這個方法,問題就就解決了。改過之後如下(兩種寫法都ok):
function downloadLog(logName){ location.href=basePath + "/demp/common/downloadDeviceLog.do?logName="+encodeURI(logName); //location.href=encodeURI(basePath + "/demp/common/downloadDeviceLog.do?logName="+logName); }
備註:還有一種方法是在前端先用base64編碼,後端用base64解碼,我找到了兩篇文章,裡面很詳細,大家可以參考
1.《JS實現密碼加密》包含base64加密解密、md5加密、sha1加密
2.《java base64編碼 加密和解密(切記注意亂碼問題)》
本文參考《IE上的The valid characters are defined in RFC 7230 and RFC 3986坑》 ,想詳細瞭解報錯的課參考此文章