get请求url拼接参数包括特殊字符报错400Bad Request
解决办法:
对请求参数进行编码,可以使用encodeURI()函数(亲测)
或者使用以下办法:
1.将get请求替换为post请求(替换成本过高);
2.使用低版本的tomcat
3.使用高版本的tomcat,修改tomcat配置;(修改tomcat目录底下的/conf/catalina.properties配置文件)
原因:
Tomcat的新版本中增加了一个新特新,就是严格按照RFC 3986规范进行访问解析,
RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4种特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。
而我们的系统在通过地址传参时,在url中传了一段参数包含有有不在RFC3986中的保留字段中,所以会报这个错。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注:
encodeURI() 函数的作用是将URI中的某些特定的字符以一位到四位的转义序列来替代,这些转义序列就是这些字符的UTF-8编码(如果说某些字符是由两个代替字符构成的,该字符也只会是四位的转义序列)。
现在我们假定encodeURI() 函数的参数是一个完整的URI,该函数是不能对URI里具有特殊含义的保留字符进行编码的。
encodeURI() 函数不会替代的字符主要包括以下的这些:
- 保留字符
;
,
/
?
:
@
&
=
+
$
- 非转义字符 字母和数字以及- _ . ! ~ * ' ( )
- 井号 #