用語辞典・エラー・運用

HTTPステータスコード

HTTPステータスコードとは

HTTPステータスコード(エイチティーティーピー・ステータス・コード)は、HTTP応答の結果を3桁の数値で示すコードで、成功、転送、利用者側エラー、サーバー側エラーなどに分類されます。

HTTP 応答の開始行に入り、ブラウザーやAPIクライアントへ「次に何をすべきか」を機械可読な形で伝えます。人向け画面の見出しではなくプロトコルの制御情報です。

ステータスコードだけで処理全体の成功は断定できません。200でもアプリケーション上の失敗を本文に返す設計があり、404でもサーバーとのHTTP通信自体は正常に成立しています。

一つの要求から五種類の応答へ分岐する継続、成功、転送、要求側問題、サーバー側問題をコードの先頭桁で分類する
ブラウザーからゲートウェイとサーバーへ要求を送り、継続、成功、別宛先への転送、要求の問題、サーバーの故障という五つの応答へ分かれる様子を示すピクトグラム図解
図1応答はオリジンサーバーだけでなく、プロキシ、ゲートウェイ、キャッシュ、CDNが生成する場合もあります。どの中継点の応答かをヘッダーと構成から調べます。

先頭桁で分かる五つの分類

1xx情報

要求処理の途中経過を伝える暫定応答です。通常は後に最終応答が続きます。

2xx成功

要求を受け付け、コードごとに定めた意味で処理したことを示します。

3xxリダイレクト

別URIの利用やキャッシュ済み表現など、追加動作が必要な状態です。

4xxクライアント側エラー

要求の構文、認証、権限、対象資源、頻度などに問題があります。

5xxサーバー側エラー

要求は妥当に見えるものの、サーバー側が処理を完了できません。

標準HTTPステータスコードは100〜599の範囲です。先頭桁は大分類を示しますが、具体的な処理は三桁全体とメソッド・ヘッダーで決まります。

応答を読む順番

  1. どの要求への応答か確認するメソッド、対象URI、送信時刻、リダイレクトの連鎖を対応付けます。
  2. ステータスコードを特定する分類だけでなく三桁全体の標準意味を読みます。
  3. 関連ヘッダーを読むLocation、WWW-Authenticate、Retry-After、Allow、Cache-Controlなど、コードと組になる情報を確認します。
  4. 本文を別層として読む人向け説明やアプリケーション固有エラーコードが含まれる場合があります。
  5. 応答した機器を切り分けるオリジンサーバー、リバースプロキシ、ゲートウェイ、CDNのどこが生成したかをログ・ヘッダーで確認します。

理由句は判断材料にしない

HTTP/1.1ではステータスコードの後ろに理由句が見えることがありますが、内容は推奨文言に固定されず、空でもプロトコル上の意味は三桁コードで決まります。HTTP/2・HTTP/3では理由句を使いません。

プログラムは「OK」「Not Found」という英語文字列を比較せず、数値コードと標準意味を処理します。独自の日本語見出しを表示してもコード自体は変わりません。

最終応答と暫定応答

1xxは要求が継続中であることを伝える暫定応答です。たとえば要求本文を送ってよい、プロトコルを切り替える、といった合図に使います。原則としてクライアントはその後の最終応答を待ちます。

最終応答は2xx〜5xxで、要求に対する最終的なHTTP結果です。ただし3xxを受けたブラウザーが新しいURIへ別要求を送ると、利用者からは一連の一回の画面遷移に見えます。

クライアントエラーは利用者だけの責任ではない

4xxの「クライアント」はHTTP要求側という分類です。壊れたリンクを生成したサイト、期限切れトークンを渡したサーバー、プロキシが削除したヘッダーなどが原因でも、最終要求が要件を満たさなければ4xxになります。

同様に5xxでもオリジンサーバーのプログラムだけが原因とは限りません。ゲートウェイが上流サーバーへ接続できない、負荷分散装置がタイムアウトした、メンテナンスで利用不能など、応答を生成した層を特定します。

キャッシュと再試行はコード分類だけで決めない

「2xxはキャッシュ可能」「5xxは必ず再試行」のような一括処理は危険です。キャッシュできる条件は個々のステータス定義、メソッド、Cache-Control、Expires、認証状態などで決まります。

再試行はメソッドの冪等性、要求本文の再送可否、Retry-After、バックオフ、重複処理の危険を評価します。決済POSTを無条件に繰り返すと二重実行につながります。

未知のステータスコード

クライアントは登録されていないコードを受けても、先頭桁の分類を理解できる設計が求められます。たとえば未知の4xxは400に近い一般的な4xxとして扱えますが、キャッシュできる条件など個別コード固有の性質まで推測しません。

独自コードを公開APIで増やす前に、既存の標準コードと、機械判読可能なアプリケーションエラーの本文で表せないか検討します。監視では元の三桁値を失わず記録します。

HTTPステータスコードは応答の機械可読な結果分類です。三桁コード、メソッド、関連ヘッダー、本文、応答した中継点を一緒に読み、画面の文言や分類だけで原因・再試行・キャッシュを決めません。

HTTPの意味とステータスコード:RFC 9110「HTTP Semantics」

関連用語