url中含中文导致The valid characters are defined in RFC 7230 and RFC 3986解决办法

本文解决了一个关于URL中使用中文参数导致的“Invalid character found in the request target”错误。问题在于Tomcat服务器不接受未编码的中文字符,通过使用JavaScript的encodeURI方法对URL进行编码,成功解决了该问题。

报错如下:

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坑》 ,想详细了解报错的课参考此文章

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值