Tomcat URL请求400错误 URL编码 (%2F与%5C) 问题

URL请求在WEB开发中经常要使用到,有时候我们会在URL中带有一些特殊的字符,如果直接使用这个特殊字符,服务端可能不会接收到,这个时候需要对请求的URL进行编码,编码后的URL就被转换为一些特殊的字符形式:十六进制格式(用于在浏览器和插件中显示非标准的字母和字符)

jesen
1
2020-04-11 15:13:18
文档目录
我的书签
 

Tomcat URL编码请求400错误 | 问题引发源头

使用编码后URL的访问Tomcat服务器,比如使用URL:http://localhost/login%2Findex访问Tomcat服务器,导致如下图错误:

Tomcat URL编码请求400错误 | 问题分析

查看访问的URL可以看出来跟普通的URL不太一样,其中包含了%2F这样的字符,经过查阅发现这个URL经过了HTML 的URL编码(“/”被编码为:%2F, “\”被编码为:%5C),然而Tomcat服务器默认是不支持URL中“/”被编码的

Tomcat URL编码请求400错误 | 问题解决办法

可以通过修改Tomcat的配置参数:Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true,下面提供了两种修改方法:

1、修改配置文件:%TOMCAT_ROOT%/conf/catalina.properties文件中添加一行参数配置:Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
2、添加Tomcat的启动参数:-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

需要说明的是,从Apache Tomcat的官网文档上看这个配置项 属于Security组,建议大家不要轻易开启,想办法把对URL中“/”和“\”的编码去掉即可。
官方文档地址:  http://tomcat.apache.org/tomcat-6.0-doc/config/systemprops.html#Security
友情提示