1、概述
今天将参数由ids=1,2 改为ids=1|2 在请求的时候出现如下问题:
Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986
2、问题分析
高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有”|”不在RFC3986中的保留字段中,所以会报这个错。
3、解决方案(个人认为是最好改传递的形式, 而不是改tomcat 等)
这里看一下,修改Tomcat 等的方案:
1)替换url请求。不用“|”
2)对请求编码解码。 UrlDecode、UrlEncode
3) 打开 tomcat 安装目录 apache-tomcat-xxx\conf 找到 catalina.properties 在配置
默认是注释的, 打开,也可以添加其他特殊的字符
#tomcat.util.http.parser.HttpParser.requestTargetAllow=|