springboot2.7報錯:request header is too large問題及解決
springboot2.7中,后臺接口使用@RequestParam進行傳參,但是傳入的參數(shù)內(nèi)容過大,導(dǎo)致報錯
request header is too large
一、報錯內(nèi)容

問題原因:
請求頭超過了tomcat的限制值。post請求是沒有參數(shù)大小限制,但是服務(wù)器有自己的默認(rèn)大小
SpringBoot內(nèi)嵌的Tomcat服務(wù)器默認(rèn)限制是8KB
二、原因分析與解決方案概述
| 方面 | 說明 | 建議或默認(rèn)值 |
|---|---|---|
| 錯誤原因 | HTTP 請求頭過大 | 通常由于Cookie、Authorization、自定義頭過大引起 |
| Spring Boot 2.x 配置參數(shù) | server.max-http-header-size | 單位支持 B, KB, MB |
| Spring Boot 3.x 配置參數(shù) | server.max-http-request-header-size (3.x中max-http-header-size已被棄用) | 單位支持 B, KB, MB |
| Tomcat 默認(rèn)值 | 8KB (8192 bytes) | |
| Undertow 默認(rèn)值 | 1MB | |
| Jetty 默認(rèn)值 | 8KB |
解決方案概述:
主要通過調(diào)整配置文件增大請求頭大小限制,并優(yōu)化請求頭內(nèi)容。
三、解決方法
3.1、調(diào)整應(yīng)用程序配置(主要解決方案)
根據(jù)你的 Spring Boot 版本和使用的配置文件格式(properties 或 yml),進行如下配置:
Spring Boot 2.x 配置
在 application.properties 文件中添加:
# 設(shè)置最大 HTTP 請求頭大小為 100KB (推薦初始值) server.max-http-header-size=100KB
或者使用字節(jié)單位:
# 設(shè)置最大 HTTP 請求頭大小為 102400 字節(jié) (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 參數(shù)已被棄用,建議使用 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); // 設(shè)置為100KB
});
}
}
3.3、直接配置 Tomcat(適用于外部 Tomcat)
如果你的 Spring Boot 應(yīng)用部署在獨立的 Tomcat 服務(wù)器上,需要修改 Tomcat 的 server.xml 文件:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxHttpHeaderSize="102400" />
重啟 Tomcat 使配置生效。
四、注意事項
- 不要盲目設(shè)置過大值:設(shè)置過大的請求頭限制會增加內(nèi)存消耗,在并發(fā)請求時可能造成內(nèi)存溢出(OOM)。應(yīng)根據(jù)實際業(yè)務(wù)需求設(shè)置合理值。
- 檢查反向代理配置:如果你的應(yīng)用前面有 Nginx 或 Apache 等反向代理服務(wù)器,這些服務(wù)器也可能有類似的請求頭大小限制(例如 Nginx 的
large_client_header_buffers指令),需要一并調(diào)整。
優(yōu)化請求頭設(shè)計:
- 避免在請求頭中存儲大量數(shù)據(jù)(如大型 Base64 編碼的圖片)。
- 考慮將大數(shù)據(jù)存儲在請求體(Body)而非請求頭中。
- 對于 GET 請求參數(shù)過長的情況,考慮改為 POST 請求,將參數(shù)放在請求體中。
五、總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringBoot從Service層獲取request.getHeader()的幾種方式
- SpringBoot中@RequestBody的偽表單提交場景
- Springboot接收文件報錯Required request part‘file‘is not present問題分析及解決
- 解決Spring/SpringBoot @RequestParam注解無法讀取application/json格式數(shù)據(jù)問題
- SpringBoot解析JSON報錯400 Bad Request的解決方案
- SpringBoot中使用異步線程導(dǎo)致Request請求頭丟失問題的解決方法
- springboot中@RequestParam和@PathVariable區(qū)別
相關(guān)文章
java中 spring 定時任務(wù) 實現(xiàn)代碼
java中 spring 定時任務(wù) 實現(xiàn)代碼,需要的朋友可以參考一下2013-03-03
SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑的記錄分享
這篇文章主要介紹了SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題
YYYY-MM-dd可能會導(dǎo)致跨年周的日期被歸屬到錯誤的年份, yyyy-MM-dd總是表示實際的日歷年份,無論日期所在的周是否跨年,本文就來介紹一下兩者的區(qū)別,感興趣的可以了解一下2024-01-01
如何使用Playwright對Java API實現(xiàn)自動視覺測試
這篇文章主要介紹了如何使用Playwright對Java API實現(xiàn)自動視覺測試,幫助大家更好的理解和使用Playwright,感興趣的朋友可以了解下2021-01-01
java實現(xiàn)仿windows 字體設(shè)置選項卡實例
本篇文章介紹了java仿windows 字體設(shè)置選項卡,可實現(xiàn)類似windows字體設(shè)置效果,需要的朋友可以參考下。2016-10-10
JavaMail實現(xiàn)發(fā)送超文本(html)格式郵件的方法
這篇文章主要介紹了JavaMail實現(xiàn)發(fā)送超文本(html)格式郵件的方法,實例分析了java發(fā)送超文本文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Dubbo注冊中心與服務(wù)發(fā)現(xiàn)詳解
本文全面介紹了Dubbo注冊中心及服務(wù)發(fā)現(xiàn)機制,包括Zookeeper、Nacos、Multicast等多種注冊中心的配置方法、高可用特性及其在接口級和應(yīng)用級服務(wù)發(fā)現(xiàn)中的應(yīng)用,支持多注冊中心和高階服務(wù)治理能力,實現(xiàn)微服務(wù)的動態(tài)擴容和流量管控2025-10-10

