java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

微信小程序前后台使用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

原文地址:https://www.cnblogs.com/zeroingToOne/p/8991129.html

时间: 2024-10-10 13:51:34

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986的相关文章

异常:Invalid character found in the request target. The valid characters are defined in RFC 3986

一.背景 事情是这样的,前几天做一个基本的数据库“增删改查”的需求,前端传参的方式是“JSON字符串”,后端接收到此参数后,使用阿里巴巴fastjson进行解析,然后入库.需求很简单吧,但是偏偏遇到问题了. 我发现,JSON字符串里面无数组,纯粹的都是json结构的时候,即都是“{}”时,不会报错,传参入库没问题.但是只要传参的值里面有数组,即有“[]”的结构时,就报错.报错内容如下(我的tomcat版本是8.5.45): java.lang.IllegalArgumentException:

异常解决:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

前言: 在用IE浏览器时访问tomcat项目时,页面报400错误,后台错误: java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 在网上查得资料时因为Tomcat版本在7以后会对http请求进行验证 解决办法: 1.使用encodeURI函数,因为IE浏览器无法对URL

Tomcat 8 Invalid character found in the request target. The valid characters are defined in RFC 3986

终极解决方案: Invalid character found in the request target. The valid characters are defined in RFC 3986 25-Aug-2018 11:27:27.086 信息 [http-nio-8087-exec-5] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header Note: further oc

java.lang.IllegalArgumentException: Invalid character found in the request target.

http参数存在特殊字符: 特殊字符是出现在后面跟的参数中,对参数进行 URL 编码,可以使用 JavaScript 中的 encodeURIComponent() 函数. 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9717274.html

解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i

【问题】Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 问题

具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || i == 62 || i == 92 || i == 94 || i == 96 ||

解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i

Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986

Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 6