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() 函数不会替代的字符主要包括以下的这些:

  • 保留字符           ; , / ? : @ & = + $
  • 非转义字符        字母和数字以及- _ . ! ~ * ' ( )
  • 井号                #
posted @ 2023-07-25 10:13  花田007  阅读(373)  评论(0编辑  收藏  举报