The valid characters are defined in RFC 7230 and RFC 3986 (encodeURIComponent)

这是一篇本来早就打算写,但又一直忘了写的小记录。由于昨天部署项目的时候,突然又重现这个问题,所以今天就记录一下。

问题是这样的,jsp请求后台时,传参出问题,导致控制台报错。错误如下:


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

截图如下:

jsp对应参数 如下:有问题的我已经圈起来了,注意第一个红框的数据

原因就在于  url参数中存在着 特殊字符,所以导致报错

 RFC3986 文档规定,Url 中只允许包含英文字母(a-zA-Z )、数字(0-9 )、-_.~4 个特殊字符以及所有保留字符。
Url 可以划分成若干个组件,协议、主机、路径等。RFC3986 中指定了以下字符为保留字符: ! * ' ( ) ; : @ & =+ $ , / ? # [ ]

上面 URL中的 scriptes参数中的 "{}"就是非法字符,直接传递就会出现问题

解决办法:使用  encodeURIComponent 编码后再传递给后台

修改后:问题得以解决

JavaScript encodeURIComponent() 函数


定义和用法

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

语法

encodeURIComponent(uri)

实例

Example

使用 encodeURIComponent() 对 URI 进行编码:

<script>

    var uri="http://w3cschool.cc/my test.php?name=ståle&car=saab";
    document.write(encodeURIComponent(uri));

</script>

以上实例输出结果:

http%3A%2F%2Fw3cschool.cc%2Fmy%20test.php%3Fname%3Dst%C3%A5le%26car%3Dsaab

发布了100 篇原创文章 · 获赞 96 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq_25221835/article/details/87620042
今日推荐