nob@lit-forge

HTTP ステータスコード 早見表

1xx から 5xx までの HTTP ステータスコードを用途・意味・典型的なユースケースで整理した早見表。API 開発や Web サーバーのデバッグで迷う代表的なコード(301/302/401/403/429/502 など)の違いを実例付きで解説。

#HTTP#ステータスコード#API#Web

1xx 情報レスポンス

Code名称用途
100Continueリクエストの前半を受理、続きを送ってよい
101Switching Protocolsプロトコル切替(例: WebSocket へのアップグレード)

2xx 成功

Code名称用途
200OK最も一般的な成功
201CreatedPOST でリソース作成成功(Location ヘッダを付けるのが定石)
202Accepted受理したが処理は非同期(ジョブキューに積んだ等)
204No Content成功・ボディなし(DELETE や PUT 後に使われる)
206Partial ContentRange リクエストに対する部分応答

3xx リダイレクト

Code名称用途
301Moved Permanently恒久的移動。ブラウザ・検索エンジンにキャッシュされる
302Found一時的移動。次のアクセス時は元の URL を再試行
303See OtherPOST 後に GET リダイレクト(PRG パターン)
304Not Modified条件付き GET で未更新。ETag / If-Modified-Since と併用
307Temporary Redirect302 と似るが、メソッドを保持する(POST→POST)
308Permanent Redirect301 と似るが、メソッドを保持する

4xx クライアントエラー

Code名称用途
400Bad Requestリクエスト構文が不正(JSON パースエラーやバリデーション NG)
401Unauthorized未認証。WWW-Authenticate ヘッダを付ける
403Forbidden認証済みだが権限なし
404Not Foundリソースが存在しない
405Method Not AllowedGET のみ許可しているエンドポイントに POST 等
408Request Timeoutサーバーがリクエスト受信の待ち時間を超過
409Conflict競合状態(例: 楽観的ロック失敗)
410Gone恒久的に消去されたリソース(404 より強い意味)
413Payload Too Largeリクエストボディが大きすぎる
415Unsupported Media TypeContent-Type が受け付けられない
422Unprocessable Entity構文は OK だが意味的に処理できない(バリデーション標準)
429Too Many Requestsレートリミット超過。Retry-After ヘッダを返すのが推奨

5xx サーバーエラー

Code名称用途
500Internal Server Error想定外のサーバーエラー全般
501Not Implementedメソッド or 機能が未実装
502Bad Gateway上流サーバー(リバースプロキシ越し等)から不正な応答
503Service Unavailable一時的に不可(メンテ・過負荷)。Retry-After 推奨
504Gateway Timeout上流サーバーが時間内に応答しなかった

使い分けで迷いがちなケース

  • 400 vs 422: 構文エラー(JSON パース失敗など)は 400、意味エラー(必須項目欠落)は 422 と使い分けると API 利用側が扱いやすい
  • 401 vs 403: 誰なのか分からない → 401、誰か分かるがアクセス権なし → 403
  • 301 vs 302 vs 308: SEO で正規 URL に集約したい → 301/308、メソッドを変えたい(POST→GET)→ 303
  • 429 の Retry-After: 秒数 or HTTP-date を返す。これを返さないと自動リトライが暴走しやすい
  • 503 の活用: 一時メンテ時は 503 を返す。404 や 500 を返すと検索エンジンがインデックスを落とす

関連ツール(lit-forge)