HTTPステータスコード一覧
Web開発で頻繁に遭遇するHTTPステータスコードを分類別にまとめました。APIの設計やデバッグ、エラーハンドリングの実装時にご活用ください。
HTTPステータスコードとは
HTTPステータスコードは、クライアント(ブラウザやAPIクライアント)からのリクエストに対してサーバーが返すレスポンスの状態を示す3桁の数値です。最初の1桁でカテゴリが決まり、1xx〜5xxの5つのクラスに分類されます。適切なステータスコードを返すことは、RESTful APIの設計において非常に重要です。
1xx:情報レスポンス(Informational)
リクエストを受け取り、処理を継続中であることを示します。通常、ブラウザが自動的に処理するため開発者が直接扱うことは少ないです。
| コード | 名称 | 説明 |
|---|---|---|
100 | Continue | リクエストの最初の部分を受け取った。クライアントはリクエストの続行が可能 |
101 | Switching Protocols | プロトコルの切り替え要求を受理。WebSocket接続時に使用 |
103 | Early Hints | 最終レスポンスの前にリソースのプリロードを開始するためのヒント |
2xx:成功レスポンス(Success)
リクエストが正常に受理・処理されたことを示します。API開発で最もよく使うカテゴリです。
| コード | 名称 | 説明 | 主な用途 |
|---|---|---|---|
200 | OK | リクエスト成功 | GET / PUT / PATCH の成功時 |
201 | Created | リクエスト成功、新しいリソースが作成された | POST でリソース作成成功時 |
202 | Accepted | リクエストを受理したが処理は完了していない | 非同期処理の受付時 |
204 | No Content | リクエスト成功、返すコンテンツなし | DELETE 成功時、PUT で更新のみの場合 |
206 | Partial Content | 範囲リクエストへの部分レスポンス | 大容量ファイルのダウンロード再開時 |
3xx:リダイレクション(Redirection)
リクエストの完了には追加のアクション(リダイレクト先へのアクセスなど)が必要であることを示します。SEOやURL移行時に重要です。
| コード | 名称 | 説明 | 主な用途 |
|---|---|---|---|
301 | Moved Permanently | リソースが恒久的に移動した | URL変更、ドメイン移行。SEO評価を引き継ぐ |
302 | Found | 一時的に別のURLへリダイレクト | メンテナンス時の一時転送 |
303 | See Other | GETメソッドで別のURLを参照 | POST処理後のリダイレクト(PRGパターン) |
304 | Not Modified | リソースが変更されていない | ブラウザキャッシュの利用。帯域の節約 |
307 | Temporary Redirect | 一時的リダイレクト(メソッド維持) | HTTP→HTTPSの一時転送 |
308 | Permanent Redirect | 恒久的リダイレクト(メソッド維持) | APIエンドポイントの恒久移動 |
4xx:クライアントエラー(Client Error)
クライアント側に問題があることを示します。リクエストの内容や認証情報の不備が原因です。
| コード | 名称 | 説明 | 主な用途 |
|---|---|---|---|
400 | Bad Request | リクエストの構文が不正 | バリデーションエラー、不正なJSON |
401 | Unauthorized | 認証が必要 | 未ログイン、トークン切れ |
403 | Forbidden | アクセス権限がない | 認証済みだがリソースへのアクセス不可 |
404 | Not Found | リソースが見つからない | 存在しないURL、削除済みリソース |
405 | Method Not Allowed | 許可されていないHTTPメソッド | GETのみのエンドポイントにPOST送信 |
408 | Request Timeout | リクエストがタイムアウト | クライアントからのデータ送信が遅い場合 |
409 | Conflict | リソースの競合 | 重複データ登録、楽観的ロックの衝突 |
413 | Payload Too Large | リクエストボディが大きすぎる | ファイルアップロード上限超過 |
415 | Unsupported Media Type | サポートされていないメディアタイプ | 不正なContent-Type |
422 | Unprocessable Entity | 構文は正しいが意味的に処理不能 | バリデーションエラー(詳細) |
429 | Too Many Requests | レートリミット超過 | API呼び出し回数制限 |
5xx:サーバーエラー(Server Error)
サーバー側で処理に失敗したことを示します。サーバーの設定不備やアプリケーションのバグが原因です。
| コード | 名称 | 説明 | 主な用途 |
|---|---|---|---|
500 | Internal Server Error | サーバー内部エラー | 未処理の例外、アプリケーションバグ |
501 | Not Implemented | サーバーが未対応の機能 | 未実装のAPIエンドポイント |
502 | Bad Gateway | ゲートウェイが不正なレスポンスを受信 | リバースプロキシの上流サーバーが応答不能 |
503 | Service Unavailable | サービス利用不可 | メンテナンス中、過負荷状態 |
504 | Gateway Timeout | ゲートウェイのタイムアウト | 上流サーバーからの応答がタイムアウト |
よくある質問
401と403の違いは?
401 Unauthorizedは認証が必要であることを示し、ログインやトークン提供を促します。403 Forbiddenは認証済みだがリソースへのアクセス権限がないことを示します。例えば、一般ユーザーが管理者専用ページにアクセスした場合は403が適切です。
301と308の違いは?
どちらも恒久的リダイレクトですが、301はリダイレクト時にHTTPメソッドがGETに変更される可能性があります。308はリクエストメソッドを維持したまま転送します。POST リクエストのリダイレクト先でもPOSTメソッドを維持したい場合は308を使用します。
413エラーが出たら?
ファイルアップロード時に413 Payload Too Largeが返された場合は、サーバー(Nginx: client_max_body_size、Apache: LimitRequestBody)やPHP(upload_max_filesize、post_max_size)の設定を確認してください。DevLabのしきい値テスト用ファイルを使って上限値を検証できます。