HTTPQUERY
日本語

431 Request Header Fields Too Large

使い方

431 Request Header Fields Too Large ステータスコードは、HTTP ヘッダーで指定されたデータが多すぎるため、サーバーがその HTTP リクエストの処理を拒否していることを示します。

サーバーによって、これは HTTP ヘッダー全体の長さの合計を指す場合と、特定のヘッダーを指す場合があります。いずれの場合も、クライアントは1つ以上の HTTP ヘッダーを削除してリクエストを再試行できます。HTTP ヘッダーの量を抑える方法の1つは、送信するクッキーを削るか減らすことです。

SEO への影響

Google のような検索エンジンは、431 のレスポンスステータスを持つ URL をインデックスしません。このステータスコードを返す、以前にインデックスされていた URL は検索結果から削除されます。

例

クライアントがリソースを要求し、2つの大きなクッキー値の組み合わせが HTTP ヘッダーについてサーバーが設定した上限を超えているため、サーバーは 431 Request Header Fields Too Large で応答します。

リクエスト

GET /tech-news HTTP/1.1
Host: example.com
Cookie: first_cookie=<very_long>; second_cookie=<long_again>

レスポンス

HTTP/1.1 431 Request Header Fields Too Large
Content-Type: text/html
Content-Length: 183

<html>
  <head>
    <title>Request Headers Too Long</title>
  </head>
  <body>
   <p>The request headers are too long.
   Try retrying without cookies.</p>
  </body>
</html>

対処方法

ブラウザで該当ドメインのクッキーを消去します。クッキーの蓄積が最も頻繁な原因です。サードパーティのスクリプト、アナリティクスのタグ、マーケティングのピクセルが訪問のたびにクッキーを設定し、その合計サイズが最終的にサーバーの制限を超えます。ブラウザのクッキーを全消去する前に、まずサイト固有のクッキーを消去してください。

リクエストとともに送るカスタムヘッダーの値を削減します。長い認可トークン、過大な X-Custom-* ヘッダー、ヘッダーに埋め込まれた URL エンコード済みのクエリパラメーターは、いずれも合計サイズに寄与します。

サーバー側では、ヘッダーのバッファ制限を増やします。

サイト全体でクッキーの使用状況を監査します。ドメインごとに設定するクッキーの数を制限し、SameSite、Path、Domain の各属性を使って、必要のないサブドメインやパスへクッキーが伝播しないようにします。すべてのリクエストに付随する必要のないデータは、サーバー側のストレージや localStorage へ移します。

サーバーの制限を 32 KB を超えて引き上げると、サービス拒否のリスクが生じます。制限は正当なトラフィックに対応できる分だけ引き上げ、その変更はリクエストサイズの監視と組み合わせてください。

Chrome と 431 エラー

Chrome は、あるドメインに蓄積したクッキーによってリクエストヘッダーがサーバーの制限を超えると、「Bad Request - Request Header Field Too Long」または「Bad message 431」と表示します。Chrome の設定で特定サイトのクッキーを消去すると(設定 > プライバシー > Cookie > すべてのサイトデータを表示)、他のサイトに影響を与えずにこのエラーが直ちに解消します。

コードリファレンス

.NET

HttpStatusCode.RequestHeaderFieldsTooLarge

Rust

http::StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE

Rails

:request_header_fields_too_large

Go

http.StatusRequestHeaderFieldsTooLarge

Symfony

Response::HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE

Python3.5+

http.HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_REQUEST_HEADER_FIELDS_TOO_LARGE

Angular

@angular/common/http/HttpStatusCode.RequestHeaderFieldsTooLarge