リファレンス

HTTPステータスコード大全

「401と403の違いは?」「502と504はどっちが上流の問題?」—— HTTPステータスコードの意味・使いどころ・よくある原因を日本語で。 コード番号や名称で検索し、クラスで絞り込めます。

39

100

継続Continue

リクエストの前半(ヘッダ)は問題ないので本体の送信を続けてよい、という中間応答。

Expect: 100-continue を送った大きなPOSTで使われる。

101

プロトコル切替Switching Protocols

Upgradeヘッダの要求に応じてプロトコルを切り替える。

WebSocketのハンドシェイクで返る。

103

早期ヒントEarly Hints

本応答の前に、先読み(preload)すべきリソースのヒントを返す。表示の高速化に使う。

200

成功OK

最も一般的な成功。GETなら本体、POSTなら結果が返る。

201

作成完了Created

リクエストが成功し、新しいリソースが作成された。

作成先URLを Location ヘッダで返すのが作法。

202

受理(非同期)Accepted

要求は受け付けたが、処理はまだ完了していない。非同期・バッチ処理向き。

204

本文なしNo Content

成功したが返す本体がない。DELETE成功やフォーム保存後などに。

ボディを付けてはいけない。

206

部分取得Partial Content

Rangeリクエストに応じて、リソースの一部だけを返した。

動画のシークや再開ダウンロードの基盤。

301

恒久的に移動Moved Permanently

リソースは新しいURLへ恒久的に移った。

検索エンジンは評価を新URLへ引き継ぐ。ブラウザは強くキャッシュするので乱用注意。

302

一時的に移動Found

一時的な別URLへ。歴史的経緯で多くの実装がメソッドをGETに変える。

メソッドを保ちたいなら307を使う。

303

他を参照See Other

POSTの結果をGETで別URLから取得させる。二重送信を防ぐPRGパターンの要。

304

未更新Not Modified

条件付きリクエストの結果、リソースは変わっていないので本体を省略。

ETag/If-None-Match や Last-Modified/If-Modified-Since と対で使う。

307

一時的移動(メソッド維持)Temporary Redirect

302と違い、メソッドと本体をそのまま維持してリダイレクトする。

308

恒久的移動(メソッド維持)Permanent Redirect

301のメソッド維持版。POSTをPOSTのまま恒久リダイレクトしたい時に。

400

リクエスト不正Bad Request

構文やパラメータが不正でサーバーが理解できない。汎用のクライアントエラー。

401

未認証Unauthorized

認証が必要、または認証に失敗した。

名前に反して「認証(authn)」の話。WWW-Authenticateで方式を提示。認可の失敗は403。

403

権限なしForbidden

認証は済んでいても、その操作を行う権限がない。

401=誰かわからない、403=誰かはわかるが許さない。

404

未検出Not Found

リソースが存在しない。存在自体を隠したい時に403の代わりにも使う。

405

メソッド不許可Method Not Allowed

そのURLでは使えないメソッド(例: 読み取り専用にPOST)。

Allowヘッダで許可メソッド一覧を返すのが作法。

408

要求タイムアウトRequest Timeout

クライアントが時間内にリクエストを送りきらなかった。

409

競合Conflict

現在の状態と矛盾して処理できない。楽観ロックの衝突や重複作成など。

410

消滅Gone

かつて存在したが恒久的に無くなった。404と違い「もう無い」と明示できる。

412

事前条件不成立Precondition Failed

If-Match などの条件付きヘッダの条件が満たされなかった。

413

本文が大きすぎContent Too Large

リクエスト本体がサーバーの許容を超えた。アップロード上限など。

415

未対応メディア型Unsupported Media Type

Content-Typeがサーバーの対応外(例: JSON期待にXMLを送った)。

418

私はティーポットI'm a teapot

ティーポットにコーヒーを淹れさせようとした。エイプリルフールのRFC 2324由来のジョークコード。

422

処理不能Unprocessable Content

構文は正しいが意味的に処理できない(バリデーションエラー)。WebDAV由来だがWeb APIで広く使われる。

426

アップグレード必須Upgrade Required

別プロトコルへの切り替えが必要。Upgradeヘッダで指定。

428

事前条件必須Precondition Required

条件付きリクエストを要求する。更新の取りこぼし(lost update)を防ぐため。

429

要求過多Too Many Requests

レート制限を超えた。

Retry-Afterヘッダで待つべき秒数を返す。指数バックオフで再試行を。

451

法的理由で利用不可Unavailable For Legal Reasons

検閲や法的要請でブロックされた。番号は華氏451度にちなむ。

500

サーバー内部エラーInternal Server Error

サーバー側で想定外の例外が起きた。汎用のサーバーエラー。

詳細はログで。クライアントに内部情報を出さないこと。

501

未実装Not Implemented

サーバーがそのメソッドや機能に対応していない。

502

不正ゲートウェイBad Gateway

プロキシ/ロードバランサが上流サーバーから無効な応答を受けた。

上流アプリのダウンやクラッシュで頻出。

503

一時的に利用不可Service Unavailable

過負荷やメンテナンスで一時的に処理できない。

Retry-Afterで復帰目安を返せる。恒常化なら容量・スケールを疑う。

504

ゲートウェイタイムアウトGateway Timeout

プロキシ/LBが上流の応答を時間内に得られなかった。

上流の遅延やタイムアウト設定の不整合を疑う。

505

非対応HTTPバージョンHTTP Version Not Supported

リクエストのHTTPバージョンにサーバーが対応していない。

507

ストレージ不足Insufficient Storage

サーバーの保存領域が足りず処理を完了できない(WebDAV)。

511

ネットワーク認証必須Network Authentication Required

ネットワークへのアクセスに認証が要る。Wi-Fiのキャプティブポータル(ログイン画面)で使う。

つまずきやすい区別

  • 401 と 403:401は「誰かわからない(認証して)」、403は「誰かはわかるが許さない(権限なし)」。
  • 301 と 302 と 308/307:301/302は実装がメソッドをGETに変えがち。メソッドを保つなら308(恒久)/307(一時)。
  • 502 と 503 と 504:502=上流から無効な応答、503=一時的に処理不能(過負荷/メンテ)、504=上流の応答待ちタイムアウト。
  • 404 と 410:404=無い(かもしれない)、410=恒久的にもう無い(検索エンジンにも明確)。