Tomcat 10中请求含连续多斜杠导致400 Bad Request错误求助
问题分析与解决方案
核心原因
升级到Tomcat 10后,默认启用了严格的HTTP合规检查,路径中的连续斜杠(//或多个/)会被判定为欺骗性请求路由,Tomcat会直接返回400 Bad Request,请求根本无法到达Spring层。而Tomcat 8默认允许这种路径格式,所以旧环境下可以正常工作。你看到的CORS错误是附带问题——因为Tomcat直接返回400时没有添加CORS响应头,导致前端浏览器触发CORS报错,并非Spring的CORS配置有问题。
解决方法
方法1:独立部署Tomcat的配置修改
在Tomcat的conf/server.xml文件中,找到对应端口的Connector节点,添加allowDoubleSlash="true"属性:
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" allowDoubleSlash="true" />
修改完成后重启Tomcat即可生效。
方法2:嵌入式Tomcat(Spring Boot场景)配置
如果项目使用Spring Boot嵌入式Tomcat,创建配置类自定义Tomcat参数:
@Configuration public class TomcatCustomConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> { @Override public void customize(TomcatServletWebServerFactory factory) { factory.addConnectorCustomizers(connector -> { // 允许路径中存在连续双斜杠 connector.setAllowDoubleSlash(true); // 若还有反斜杠相关问题,可额外开启以下配置 // connector.setAllowBackSlash(true); }); } }
补充说明
- 无需修改你的Spring Security CORS配置,因为请求根本没进入Spring处理流程,CORS错误是400响应缺少CORS头导致的次生问题,解决Tomcat的路径检查后,CORS问题会自动消失。
- 该配置是为了兼容遗留系统的旧请求格式,若后续有条件,建议逐步修复前端请求,避免使用连续斜杠的路径格式,符合HTTP规范。
内容的提问来源于stack exchange,提问作者Gokul P
相关产品推荐
相关产品推荐

