HTTPステータスコード一覧 - 全コードの意味と使い方リファレンス
HTTPステータスコードは、サーバーがクライアントのリクエストをどのように処理したかを示す3桁の数値。先頭の数字でカテゴリが決まる。
| カテゴリ | 範囲 | 意味 |
|---|
| 1xx | 100〜199 | 情報(Informational) |
| 2xx | 200〜299 | 成功(Success) |
| 3xx | 300〜399 | リダイレクト(Redirection) |
| 4xx | 400〜499 | クライアントエラー(Client Error) |
| 5xx | 500〜599 | サーバーエラー(Server Error) |
1xx:情報
リクエストを受け取り、処理を継続中であることを示す。通常のWebアプリケーション開発で直接扱うことは少ない。
| コード | 名称 | 説明 |
|---|
| 100 | Continue | リクエストの最初の部分を受け取った。クライアントは残りを送り続けてよい |
| 101 | Switching Protocols | プロトコルの切り替えを承認(WebSocket接続確立時など) |
| 102 | Processing | リクエストを受け取り、処理中(WebDAV) |
| 103 | Early Hints | リンクヘッダーを事前送信してリソースのプリロードを促す |
2xx:成功
リクエストが正常に処理されたことを示す。
| コード | 名称 | 説明 |
|---|
| 200 | OK | リクエスト成功。最も一般的な成功レスポンス |
| 201 | Created | リソースの作成に成功(POSTでリソース作成時など) |
| 202 | Accepted | リクエストを受け付けたが、処理は完了していない(非同期処理) |
| 204 | No Content | 成功したが、返すコンテンツがない(DELETEやPATCH後など) |
| 206 | Partial Content | 部分的なコンテンツを返す(Range リクエストへの応答) |
API設計での使い分け
GET /users/1 → 200 OK(ユーザー情報を返す)
POST /users → 201 Created(ユーザーを作成して返す)
PUT /users/1 → 200 OK または 204 No Content
PATCH /users/1 → 200 OK または 204 No Content
DELETE /users/1 → 204 No Content
3xx:リダイレクト
クライアントが別のURLへ再リクエストする必要があることを示す。Location ヘッダーで転送先URLを指定する。
| コード | 名称 | 説明 |
|---|
| 301 | Moved Permanently | URLが恒久的に変更された。SEOの評価も転送される |
| 302 | Found | URLが一時的に変更された。SEOの評価は転送されない |
| 303 | See Other | 別URLをGETで参照せよ。POSTの処理後リダイレクトに使われる |
| 304 | Not Modified | キャッシュが有効。サーバーのコンテンツは変更されていない |
| 307 | Temporary Redirect | 一時的なリダイレクト。元のHTTPメソッドを維持する |
| 308 | Permanent Redirect | 恒久的なリダイレクト。元のHTTPメソッドを維持する |
301 vs 302 vs 307 vs 308
| コード | 恒久 | メソッド維持 | 主な用途 |
|---|
| 301 | ✅ | ❌(GETに変わることが多い) | URL変更・旧URL廃止 |
| 302 | ❌ | ❌(GETに変わることが多い) | 一時的なメンテナンス |
| 307 | ❌ | ✅ | POSTを維持したい一時リダイレクト |
| 308 | ✅ | ✅ | POSTを維持した恒久リダイレクト |
4xx:クライアントエラー
クライアント側に問題があることを示す。
| コード | 名称 | 説明 |
|---|
| 400 | Bad Request | リクエストの構文が不正。バリデーションエラーなど |
| 401 | Unauthorized | 認証が必要(未ログイン状態) |
| 403 | Forbidden | 認証済みだがアクセス権がない |
| 404 | Not Found | リソースが見つからない |
| 405 | Method Not Allowed | 指定のHTTPメソッドは許可されていない |
| 406 | Not Acceptable | Accept ヘッダーに対応するコンテンツ形式がない |
| 408 | Request Timeout | リクエストがタイムアウト |
| 409 | Conflict | リソースの状態と競合している(重複登録など) |
| 410 | Gone | リソースが恒久的に削除された(404との違いは意図的な削除) |
| 411 | Length Required | Content-Length ヘッダーが必要 |
| 413 | Content Too Large | リクエストボディが大きすぎる |
| 414 | URI Too Long | URLが長すぎる |
| 415 | Unsupported Media Type | Content-Type が非対応 |
| 422 | Unprocessable Content | 構文は正しいが、セマンティクスが誤っている(バリデーションエラーに使われることも) |
| 429 | Too Many Requests | レート制限超過 |
401 vs 403
- 401 Unauthorized:誰かわからない(認証されていない)→ ログインしてください
- 403 Forbidden:誰かはわかっているがアクセス権がない → アクセス拒否
認証されていないユーザーに対してリソースの存在を隠したい場合は 403 ではなく 404 を返すことがある(セキュリティ上の理由)。
5xx:サーバーエラー
サーバー側に問題があることを示す。
| コード | 名称 | 説明 |
|---|
| 500 | Internal Server Error | サーバー内部の予期しないエラー |
| 501 | Not Implemented | リクエストされたメソッドや機能が未実装 |
| 502 | Bad Gateway | 上流サーバーから不正なレスポンスを受け取った |
| 503 | Service Unavailable | サーバーが一時的に利用不可(メンテナンス中、過負荷など) |
| 504 | Gateway Timeout | 上流サーバーからのレスポンスがタイムアウト |
| 505 | HTTP Version Not Supported | 使用されているHTTPバージョンが非対応 |
500 / 502 / 503 / 504 の使い分け
| コード | 原因 |
|---|
| 500 | アプリケーション自体のエラー(例外、バグ) |
| 502 | リバースプロキシの背後のサーバーが壊れたレスポンスを返した |
| 503 | サーバーが一時的にダウン、キャパシティオーバー |
| 504 | リバースプロキシが上流サーバーからの応答を待ちきれなかった |
よく使うコードまとめ
実務でよく使われるコードに絞った早見表。
| コード | 名称 | 典型的な用途 |
|---|
| 200 | OK | GET成功、更新成功 |
| 201 | Created | POST成功(リソース作成) |
| 204 | No Content | DELETE成功 |
| 301 | Moved Permanently | 旧URLからの恒久リダイレクト |
| 304 | Not Modified | キャッシュ利用 |
| 400 | Bad Request | バリデーションエラー |
| 401 | Unauthorized | 未認証 |
| 403 | Forbidden | 権限なし |
| 404 | Not Found | リソースなし |
| 409 | Conflict | 重複・競合 |
| 422 | Unprocessable Content | 意味的なバリデーションエラー |
| 429 | Too Many Requests | レート制限 |
| 500 | Internal Server Error | サーバー側バグ |
| 503 | Service Unavailable | メンテナンス・過負荷 |
参考リンク