Tomcat参数maxSwallowSize的具体作用是什么?
maxSwallowSize 参数作用详解
- 本质是Tomcat针对「服务端提前终止处理的请求」设置的流量兼容参数,专门解决大请求触发服务端提前返回错误时的连接异常断开问题。
触发场景说明
当你上传文件大小超过Spring Boot配置的spring.servlet.multipart.max-file-size或spring.servlet.multipart.max-request-size阈值时,Tomcat会第一时间判定当前请求非法,需要返回413 Payload Too Large错误。但此时客户端仍会按照HTTP协议规则持续发送剩余的文件内容,不会主动停止数据传输。
这种场景下Tomcat有两种处理逻辑:
- 直接断开TCP连接:正在发送数据的客户端会收到连接重置信号,也就是你遇到的
ERR_CONNECTION_RESET报错,甚至根本收不到服务端返回的错误响应 - 先接收(官方描述里的「吞入」)客户端剩余的上传数据,全部接收完成后再返回错误响应:客户端可以正常拿到413错误提示,不会出现连接重置问题
maxSwallowSize就是控制Tomcat最多愿意接收多少字节多余请求体的阈值,默认值为2MB。如果你上传的文件超过2MB,触发大小限制后待接收的剩余数据超过了2MB阈值,Tomcat就会选择直接断开连接,进而触发报错。
配置建议
- Spring Boot 2.x及以上版本可直接在配置文件中设置:
server.tomcat.max-swallow-size=100MB - 建议配置值略大于你设置的最大允许上传文件大小即可,比如允许最大上传100MB文件,就将该参数设为101MB左右,既可以覆盖所有合法请求的异常场景,也不会额外浪费服务器资源
- 不建议盲目设置为-1(无限制),可能被恶意攻击利用,通过持续发送超大请求占满服务器带宽
内容的提问来源于stack exchange,提问作者Héctor Valls
相关产品推荐
相关产品推荐

