1. 程式人生 > >url中含中文導致The valid characters are defined in RFC 7230 and RFC 3986解決辦法

url中含中文導致The valid characters are defined in RFC 7230 and RFC 3986解決辦法

報錯如下:

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坑》 ,想詳細瞭解報錯的課參考此文章