414

状態符号 414 (HTTP)

[419] 414 (URI Too Long) は、 要求URLが長すぎるため処理できないことを表す状態符号です。

仕様書

意味

[417] 414 は、要求対象が長くてが解釈したくないため要求拒絶したことを示します >>416

[6] 厳密に言えば要求対象要求URLは異なるものですが ( 要求対象 )、 414 を送る、送らないの判定に関して言えば大差はありません。 サーバーは、 要求対象が長すぎると検知したときでも、 要求URLが長すぎると判断したときでも、 どちらでも 414 を送ることが出来ます。

[7] 長い、短いの判断は完全にサーバーに委ねられていて、 一定している必要もありません。例えば同じ URL を何回か送信してそのたびに正常処理と 414 のどちらかが返ってきても構いませんし (そんな必要があるか、 それが良い設計であるかは別問題ですが)、 同じ起源サーバー上のある path では 414 になる長さが他の path のとき正常処理になっても構いません。

[8] 従ってクライアントサーバーの判定基準を 414 応答か否かによって完全に知ることは出来ませんし、 そのような予測を期待されてもいません。
[9] もちろん、現実的な実装手法なら、一度 414 になった要求URLより長いものは 414 が返ってくる可能性が高いという一般論での予測は十分可能です。 が、汎用の HTTPクライアントライブラリーならそれを前提にした実装をしてはいけません。

文脈

[405] 構文解析したい URI の長さを超える要求対象を受信したは、 414 を返さなければなりません >>3

[420] 仕様上は明確な上限値があるわけではなく、サーバーが決めることができます。 長さ制限については要求対象, URLの長さの項を参照してください。

処理

[418] 414キャッシュ可能です >>416

[1] 理論上はクライアント414 を受信したら要求URL を短縮して再度要求を作り直して送信することができます。 しかし現実的には要求URL に冗長な情報があって、それを削って再試行できることがわかっているような状況はさほど多くありません。 特定の応用の専用のクライアントで、しかも省略可能な情報を送信するかなり特殊な状況を除けば、 414受信したらその要求は完全に失敗したものとして扱うことになります。

[5] サーバーの上限を超えて長い引数を持つ要求をしなければならないような応用では、 POST応答本体 (application/x-www-form-urlencodedmultipart/form-data) を使うのが定石となっています。 HTTP としては GETPOST要求URL引数を指定するのと POST応答本体引数を指定するのは異なるものですが、 多くのWebアプリケーションライブラリーは同一視して透過的に扱えるようにしています。 query parameter

[4] Webブラウザーnavigate414 を受信したときは、 400 など他の 4xx応答と同様に、 普通の一般的な応答として表示などをすることになります。 fetch

歴史

[2] RFC 2068 & 2616 (HTTP/1.1) 10.4.15 414 Request-URI Too Long

The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URL URI "black hole" of redirection (e.g., a redirected URL URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.

サーバーは、その解釈する意思がある長さよりも Request-URI が長いために、要求をサービスするのを拒否しています。 この稀な状態は、クライアントが不適切にも POST 要求を長い問合せ情報をつけた GET 要求に変換しているときや、 クライアントが URI のリダイレクト「ブラック・ホール」に落下してゆくとき (例えば、リダイレクトされる URI の接頭辞が自身の接尾辞を指示しているとか)、 或いは固定長バッファーを Request-URI を読んだり処理したりするのに使っている幾つかのサーバーにあるセキュリティー・ホールを突いて攻撃しているクライアントにサーバーが攻撃されている時に限って起きることでしょう。

メモ