springboot2.7报错:request header is too large问题及解决
springboot2.7中,后台接口使用@RequestParam进行传参,但是传入的参数内容过大,导致报错
request header is too large
一、报错内容

问题原因:
请求头超过了tomcat的限制值。post请求是没有参数大小限制,但是服务器有自己的默认大小
SpringBoot内嵌的Tomcat服务器默认限制是8KB
二、原因分析与解决方案概述
| 方面 | 说明 | 建议或默认值 |
|---|---|---|
| 错误原因 | HTTP 请求头过大 | 通常由于Cookie、Authorization、自定义头过大引起 |
| Spring Boot 2.x 配置参数 | server.max-http-header-size | 单位支持 B, KB, MB |
| Spring Boot 3.x 配置参数 | server.max-http-request-header-size (3.x中max-http-header-size已被弃用) | 单位支持 B, KB, MB |
| Tomcat 默认值 | 8KB (8192 bytes) | |
| Undertow 默认值 | 1MB | |
| Jetty 默认值 | 8KB |
解决方案概述:
主要通过调整配置文件增大请求头大小限制,并优化请求头内容。
三、解决方法
3.1、调整应用程序配置(主要解决方案)
根据你的 Spring Boot 版本和使用的配置文件格式(properties 或 yml),进行如下配置:
Spring Boot 2.x 配置
在 application.properties 文件中添加:
# 设置最大 HTTP 请求头大小为 100KB (推荐初始值) server.max-http-header-size=100KB
或者使用字节单位:
# 设置最大 HTTP 请求头大小为 102400 字节 (100KB) server.max-http-header-size=102400
在 application.yml 文件中添加:
server: max-http-header-size: 100KB
或者:
server: max-http-header-size: 102400
Spring Boot 3.x 配置
从 Spring Boot 3.0 开始,max-http-header-size 参数已被弃用,建议使用 max-http-request-header-size:
server:
max-http-request-header-size: 12KB
3.2、通过代码配置(备用方案)
如果配置文件方式不生效,你可以在启动类或配置类中通过代码配置:
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServerConfig {
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> containerCustomizer() {
return factory -> factory.addConnectorCustomizers(connector -> {
connector.setMaxHttpHeaderSize(102400); // 设置为100KB
});
}
}
3.3、直接配置 Tomcat(适用于外部 Tomcat)
如果你的 Spring Boot 应用部署在独立的 Tomcat 服务器上,需要修改 Tomcat 的 server.xml 文件:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxHttpHeaderSize="102400" />
重启 Tomcat 使配置生效。
四、注意事项
- 不要盲目设置过大值:设置过大的请求头限制会增加内存消耗,在并发请求时可能造成内存溢出(OOM)。应根据实际业务需求设置合理值。
- 检查反向代理配置:如果你的应用前面有 Nginx 或 Apache 等反向代理服务器,这些服务器也可能有类似的请求头大小限制(例如 Nginx 的
large_client_header_buffers指令),需要一并调整。
优化请求头设计:
- 避免在请求头中存储大量数据(如大型 Base64 编码的图片)。
- 考虑将大数据存储在请求体(Body)而非请求头中。
- 对于 GET 请求参数过长的情况,考虑改为 POST 请求,将参数放在请求体中。
五、总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
- SpringBoot从Service层获取request.getHeader()的几种方式
- SpringBoot中@RequestBody的伪表单提交场景
- Springboot接收文件报错Required request part‘file‘is not present问题分析及解决
- 解决Spring/SpringBoot @RequestParam注解无法读取application/json格式数据问题
- SpringBoot解析JSON报错400 Bad Request的解决方案
- SpringBoot中使用异步线程导致Request请求头丢失问题的解决方法
- springboot中@RequestParam和@PathVariable区别
相关文章
IDEA mybatis Mapper.xml报红的最新解决办法
这篇文章主要介绍了IDEA mybatis Mapper.xml报红的解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04
Spring Boot Admin的使用详解(Actuator监控接口)
这篇文章主要介绍了Spring Boot Admin的使用详解(Actuator监控接口),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-05-05
实践讲解SpringBoot自定义初始化Bean+HashMap优化策略模式
本篇讲解了SpringBoot自定义初始化Bean+HashMap优化策略模式,通过实践的方式更通俗易懂,对此不了解的同学跟着小编往下看吧2021-09-09
SpringBoot接入deepseek深度求索示例代码(jdk1.8)
这篇文章主要介绍了SpringBoot接入deepseek深度求索的相关资料,包括建API key、封装询问Deepseek的工具方法(在配置文件中添加key值)、调用测试并确保端口一致例如8091,最后运行结果,需要的朋友可以参考下2025-02-02


最新评论