Spring Boot 3.x中如何通过WebServerFactoryCustomizer设置HTTP头大小?
Spring Boot 3.x 配置 Tomcat 响应头最大大小
问题背景
根据Spring Boot 3迁移指南,server.max-http-header-size属性已被弃用,仅可通过server.max-http-request-header-size属性设置HTTP请求头的最大大小。但实际运行中遇到如下异常:
org.apache.coyote.http11.HeadersTooLargeException: An attempt was made to write
more data to the response headers than there was room available in the buffer.
Increase maxHttpHeaderSize on the connector
or write less data into the response headers.
需要增大嵌入式Tomcat 10中HTTP响应头的最大大小,Tomcat 10支持maxHttpHeaderSize和maxHttpResponseHeaderSize两个属性,需通过WebServerFactoryCustomizer完成配置。
实现方案
创建一个自定义的WebServerFactoryCustomizer组件,对Tomcat连接器进行配置:
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.stereotype.Component; @Component public class TomcatHeaderConfigurer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> { @Override public void customize(TomcatServletWebServerFactory factory) { factory.addConnectorCustomizers(connector -> { // 设置请求头最大大小(字节),同时作为响应头默认值 connector.setAttribute("maxHttpHeaderSize", 65536); // 单独设置响应头最大大小(字节),优先级高于maxHttpHeaderSize connector.setAttribute("maxHttpResponseHeaderSize", 65536); }); } }
参数说明
maxHttpHeaderSize:控制HTTP请求头的总最大大小,若未单独配置maxHttpResponseHeaderSize,该值也会作为响应头的默认最大限制maxHttpResponseHeaderSize:专门用于限制HTTP响应头的总最大大小,设置后会覆盖maxHttpHeaderSize对响应头的限制- 示例中设置为65536字节(64KB),可根据业务需求调整为更大的值,如131072(128KB)
内容的提问来源于stack exchange,提问作者pero_hero
相关产品推荐
相关产品推荐

