← 中文资源

简体中文版本

HTTP 报 431 请求头字段过大

通过减小过大的 cookie 与请求头,并适度提高服务器请求头缓冲区上限,修复 HTTP 431。

阅读英文原文

症状

请求以 431 Request Header Fields Too Large 失败,常只对 cookie 已增长的特定用户出现。Cookie 会随时间累积,而把大 token 存进 cookie 会把请求头块推过服务器或代理的缓冲区上限。该错误是保护性上限而非缺陷,因此修复要么缩小头部,要么谨慎提高上限。

诊断

测量请求头大小;检查 set-cookie 的累积;查看 large_client_header_buffers 等配置。

curl -v -b "$(cat cookies.txt)" https://host/ 2>&1 | grep -i "> " | wc -c

根因

请求头块超过了服务器或代理的缓冲区上限,因为 cookie 或请求头增长的尺寸超过配置的最大值。

修复

清理 cookie;把大 token 移出 cookie 改为短期引用;删除不再需要的 cookie。确需更大空间时适度提高请求头缓冲上限,因为过大的上限会增加每连接内存与滥用的影响。

验证

发送此前失败的请求确认成功,并确认受影响用户能认证与浏览。这些用户请求成功即证明头部尺寸已在上限内。

常见陷阱

为提高上限而设置极大值会放大内存与 DoS 风险;应结合减小头部尺寸处理。