tomcat的get请求有{}时报错,浏览器get请求400
记录自己在开发时遇到的一个小坑。当我使用调试工具发一个get请求进行时可以正常访问,但是使用浏览器直接访问便会直接报错。
可以看到此时可以正常访问。
然后我们复制链接到浏览器地址直接打开
最后我们对比两次请求访问 URL 来看,成功访问的将** "{"," }**"进行了编码。访问失败的没有进行编码。
问题解决
这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有"{"不在RFC3986中的保留字段中
如果我们的参数中需要有 “{”或“}”的话,我们可以将其替换为编码后的字符,以下是二者的编码
字符 | 编码 |
---|---|
{ | %7B |
} | %7D |
开发中遇到的坑总是反反复复,希望记录这些坑可以提高我的效率。12月份的校招加油!