首页/网络/协议速查/431 Request Header Fields Too Large 请求头过大
HTTP 方法与状态码91 条

431 Request Header Fields Too Large 请求头过大

请求头字段总大小或单个字段超限:常见于 Cookie 累积过大、JWT 放头里过长。

协议速查网络更新于 2026-10-13

431 是什么

431 Request Header Fields Too Large 表示请求头的总大小或单个字段超出了服务端的限制。最常见的诱因是 Cookie 越攒越多——浏览器会把某域名下的所有 Cookie 都带上,一路叠加很容易顶到上限;其次是过大的令牌、超长的自定义头,以及被中间层拼进去的一长串转发地址。规范定义在 RFC 6585 第 5 节。

基本信息

状态码431 Request Header Fields Too Large
语义请求头字段过大或字段数过多
规范RFC 6585 §5
常见触发Cookie 累积、令牌过长、转发地址链过长
与 414 的区别414 指请求地址过长,431 指请求头过大
修复方向精简请求头或调整服务端缓冲上限

各层限制项

组件配置项说明
Nginxlarge_client_header_buffers默认 4 8k,单头与总大小都受限
ApacheLimitRequestFieldSize、LimitRequestFields分别限制单字段大小与字段数量
TomcatmaxHttpHeaderSize、maxHeaderCount默认约 8k,超限直接拒绝
浏览器单条 Cookie 约 4k,每域名条数有限累积后总长度远超预期
HTTP/2 服务端MAX_HEADER_LIST_SIZE 协商值超限表现为重置流而非返回 431

复现与调整

复现与调整
curl -si https://www.example.com/ -H "X-Big: $(head -c 20000 /dev/zero | tr '\0' 'a')" | head -3
# HTTP/1.1 431 Request Header Fields Too Large
nginx -T | grep -i large_client_header_buffers   # 查看当前生效值
# Nginx 调整示例(放在 http 或 server 段)
# large_client_header_buffers 4 16k;

典型使用场景

  • 偶发 431 排查:确认是 Cookie 累积导致,还是某次请求带了异常大的自定义头
  • 单点登录改造:把令牌从头里精简,或按域拆分,避免所有 Cookie 都发到所有子域
  • 网关扩容后的回归:确认反向代理与后端框架两层的上限都一致
  • 压测与自动化:脚本里拼接超长头触发上限,验证限流与错误处理路径
  • HTTP/2 场景确认:观察是否表现为流被重置,而不是收到 431
只在网关放宽上限、后端框架仍保持默认值,症状就是间歇性 431:请求量小或头不成规律时看不出来,一旦 Cookie 增长到某个长度就稳定失败。排查时应把链路上每一层——代理、应用服务器、框架——的实际上限都查一遍。

易错点

  • 只调大网关缓冲而后端框架上限未动,出现难以复现的间歇性 431
  • 把各种小数据都塞进 Cookie,长度随业务增长,最终越限
  • 同一域下挂多个子应用,Cookie 互相叠加,问题在某个子域先暴露
  • 在 HTTP/2 下看不到 431 就认为没有头大小问题,实际是流被重置,日志里另有记录
  • 用超长头做业务参数传递,把协议头当成数据通道使用

数据来源与参考

  • RFC 6585 §5 431
  • Nginx large_client_header_buffers 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌