431 Request Header Fields Too Large(RFC 6585)表示服务器因为某个请求头字段过大,或所有请求头字段加起来过大,而不愿处理该请求。客户端可以减小请求头的大小后重试。
罪魁祸首通常是 Cookie:一个网站及其子域名设置的 Cookie 越来越多,直到 Cookie 请求头超出服务器的限制。很长的 Referer URL 和较大的身份验证令牌也会导致这个问题。例如,Node.js 在请求头超出限制时会返回 431,开发者经常在 localhost 上遇到这种情况,因为许多本地项目的 Cookie 都堆积在那里。
并非所有服务器都使用 431。例如,nginx 会改为返回带有“Request Header Or Cookie Too Large”提示的 400 Bad Request。
响应示例
HTTP
HTTP/1.1 431 Request Header Fields Too Large
Connection: close SEO 与重定向检测
爬虫发送的请求头很小,也不带 Cookie,因此几乎不会触发 431。如果重定向检测返回 431,应减小所添加的自定义请求头或 Cookie 的大小。
常见原因与使用场景
- 某个域名及其子域名的 Cookie 越积越多。清除这些 Cookie,或者减少 Cookie 的数量和大小。
- 较大的 JWT 或其他授权请求头。
- 来自带有超长查询字符串的 URL 的超长
Referer请求头。 - Node.js 服务器(
--max-http-header-size)、代理或负载均衡器的请求头大小限制过低。