1.情景展示
当你使用浏览器进行问号传参与后台进行交互时,会报这个异常。
tomcat控制台报错信息如下:
The valid characters are defined in RFC 7230 and RFC 3986
2.原因分析
这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,
而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符
以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]);
换句话说,?问号传参后面的字符超过了这个范围,就会出现这个异常。
出现这个异常,需要满足3个条件:
第一:tomcat7.0.73以上;
第二:ie浏览器;
第三:get传参,参数值带有中文或者带有双引号。
3.解决方案
方式一:使用encodeURI()函数对中文参数值进行编码(1次不行,就用2次);
方式二:将get传参改为post传参;
方式三:修改catalina.properties;
找到{TOMCAT_HOME}/conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=| ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|这后面加上要增加的字符。
方式四:降低tomcat版本。