java.lang.IllegalArgumentException: Invalid character found in the request target. The valid charact
Posted zeroingToOne
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.IllegalArgumentException: Invalid character found in the request target. The valid charact相关的知识,希望对你有一定的参考价值。
微信小程序前后台使用get方式传参时报错如图。但在微信开发平台和苹果测试都没事,在安卓手机上就报这个错,猜想原因是get传递了汉字的原因。
尝试了下在后台输出从前台获取的参数,但是后台什么也没有获取到,直接报错。
最后用id替换了url里的中文;因为搜索功能不能替换中文的,改成了post请求。
参考:
【Java EE】get和post请求的编码过程
get请求中文参数乱码的解决之道
网上也有很多报这个错的原因是含有特殊字符:
有些版本的Tomcat严格按照 RFC 3986规范进行访问解析,
而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符
(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
传入的参数(例:"{")中有不在RFC3986中的保留字段中,会报这个错。例:http://localhost:8080/index.do?{id:123}
解决:
1. 去掉url中的特殊字符
2. 对参数进行url编码
3. 使用post提交
4. 更换更低版本的Tomcat
5. 在 conf/catalina.properties 中最后添加一行:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
网上也有说添加下面一句,来允许禁止的字符:|{}
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
参考:https://blog.csdn.net/testcs_dn/article/details/71716829
关于对参数进行url编码:
例:对url中的||进行编码
(1) 前台对url编码:
encodeURI("http://localhost:8080/app/handleResponse?msg=name|id|") > http://localhost:8080/app/handleResponse?msg=name%7Cid%7C
(2)只编码参数:
encodeURIComponent("msg=name|id|")
> msg%3Dname%7Cid%7C
以上是关于java.lang.IllegalArgumentException: Invalid character found in the request target. The valid charact的主要内容,如果未能解决你的问题,请参考以下文章