HTTPステータスコード チートシート

AI作成データこのコンテンツのデータはAIが公式資料や辞書を参照して作成しました。正確さを心がけていますが、誤りが含まれる可能性があります。

HTTPステータスコードの一覧チートシート。1xx〜5xxの全カテゴリをカバーし、各コードの意味・使い所・APIデザインのベストプラクティスを日本語で解説。

全HTTPステータスコードの意味と使い所を日本語でまとめて参照

1xx 情報レスポンス

リクエストを受け取り、処理を継続していることを示すステータスコードです。クライアントは追加のアクションを待つ必要があります。

コード名前説明よくある使用場面
100Continueリクエストの最初の部分を受け取った。クライアントは残りを送信してよい大きなリクエストボディを送る前の確認
101Switching Protocolsサーバーがプロトコルの切り替えに同意したHTTP から WebSocket への切り替え
103Early Hints最終レスポンスの前にリソースのプリロードを開始できるCSS や JS ファイルの先行読み込み指示

2xx 成功レスポンス

リクエストが正常に受信・理解・処理されたことを示すステータスコードです。

コード名前説明よくある使用場面
200OKリクエストが成功したGET でリソースを取得、PUT で更新成功
201Createdリクエストが成功し、新しいリソースが作成されたPOST で新規リソースを作成した場合
202Acceptedリクエストを受け付けたが、処理はまだ完了していない非同期処理のジョブ投入
204No Contentリクエストは成功したが、返すコンテンツがないDELETE でリソースを削除した場合
206Partial Contentリクエストされた範囲の一部だけを返す動画ストリーミング、大きなファイルの分割ダウンロード

3xx リダイレクト

リクエストを完了するために追加のアクション(別のURLへの移動)が必要であることを示すステータスコードです。

コード名前説明よくある使用場面
301Moved Permanentlyリソースが恒久的に新しいURLに移動したドメイン変更、URL構造の恒久変更。SEO評価が引き継がれる
302Foundリソースが一時的に別のURLにあるメンテナンス中の一時転送。元URLが将来復活する場合
303See Other別のURLにGETでアクセスするよう指示するフォーム送信(POST)後に結果ページへリダイレクト
304Not Modifiedリソースが変更されていないのでキャッシュを使える条件付きリクエスト(If-Modified-Since)への応答
307Temporary Redirect一時的リダイレクト。HTTPメソッドを変更しないPOST リクエストをメソッドを維持したまま一時転送
308Permanent Redirect恒久的リダイレクト。HTTPメソッドを変更しないAPI エンドポイントの恒久移動(メソッド維持が必要な場合)

4xx クライアントエラー

クライアント側のリクエストに問題があることを示すステータスコードです。リクエストの修正が必要です。

コード名前説明よくある使用場面
400Bad Requestリクエストの構文が不正でサーバーが理解できない不正な JSON、必須パラメータの欠如
401Unauthorized認証が必要。有効な認証情報が提供されていないログインしていないユーザーが保護されたリソースにアクセス
403Forbidden認証済みだがアクセス権限がない管理者専用ページへの一般ユーザーからのアクセス
404Not Foundリクエストされたリソースが見つからない存在しないURLへのアクセス、削除済みリソースの参照
405Method Not Allowedリソースは存在するが、使用されたHTTPメソッドは許可されていないGET のみ対応のエンドポイントへの POST リクエスト
408Request Timeoutサーバーがリクエストの到着を待ちきれなかったクライアントの送信が遅く、サーバー側のタイムアウト
409Conflictリクエストが現在のリソースの状態と競合する楽観的ロックでの更新衝突、重複データの作成
410Goneリソースが恒久的に削除され、転送先もない廃止されたAPIエンドポイント(404と異なり復活しない)
413Content Too Largeリクエストボディがサーバーの許容サイズを超えているアップロードファイルのサイズ制限超過
415Unsupported Media TypeサーバーがリクエストのメディアタイプをサポートしていないJSON を期待するAPIに XML を送信
418I'm a teapotティーポットにコーヒーを淹れさせようとした(ジョーク)RFC 2324 で定義されたエイプリルフールのジョーク。実務では使わない
422Unprocessable Content構文は正しいが、意味的に処理できないバリデーションエラー(メールアドレスの形式不正など)
429Too Many Requests一定時間内のリクエスト回数が上限を超えたAPIのレート制限。Retry-After ヘッダーで再試行時刻を通知
451Unavailable For Legal Reasons法的理由によりリソースを提供できない政府の検閲や著作権による制限。コード名は小説「華氏451度」に由来

5xx サーバーエラー

サーバー側の問題でリクエストを処理できなかったことを示すステータスコードです。クライアントのリクエスト自体は正当です。

コード名前説明よくある使用場面
500Internal Server Errorサーバー内部で予期しないエラーが発生した未処理の例外、サーバーのバグ
501Not Implementedサーバーがリクエストメソッドをサポートしていない未実装の機能やAPIエンドポイント
502Bad Gatewayゲートウェイまたはプロキシが上流サーバーから不正な応答を受けたリバースプロキシの背後のアプリケーションがダウン
503Service Unavailableサーバーが一時的にリクエストを処理できないメンテナンス中、過負荷状態。Retry-After ヘッダーで復旧時刻を通知
504Gateway Timeoutゲートウェイまたはプロキシが上流サーバーからの応答を待ちきれなかったバックエンドの処理が遅く、プロキシのタイムアウトを超過

APIデザインでの使い分け

REST APIを設計する際に迷いやすいステータスコードの使い分けをまとめます。

CRUDとステータスコード

RESTful APIの各操作で返すべき推奨ステータスコードです。

text
GET    /users      -> 200 OK(一覧取得)
GET    /users/123  -> 200 OK(詳細取得) / 404 Not Found
POST   /users      -> 201 Created(作成成功) + Location ヘッダー
PUT    /users/123  -> 200 OK(更新成功) / 204 No Content
PATCH  /users/123  -> 200 OK(部分更新成功)
DELETE /users/123  -> 204 No Content(削除成功)

認証・認可のエラー

text
401 Unauthorized  = 認証されていない(ログインが必要)
  例: トークンなし、トークン期限切れ

403 Forbidden     = 認証済みだが権限がない
  例: 一般ユーザーが管理者APIにアクセス

バリデーションエラー

text
400 Bad Request          = リクエスト構文が不正
  例: JSONのパースに失敗

422 Unprocessable Content = 構文は正しいが意味的にNG
  例: email が空文字、age が負の数

リダイレクトの使い分け

text
301 Moved Permanently    = 恒久的。メソッドがGETに変わる可能性あり
308 Permanent Redirect   = 恒久的。メソッドを維持する

302 Found                = 一時的。メソッドがGETに変わる可能性あり
307 Temporary Redirect   = 一時的。メソッドを維持する

303 See Other            = POST後にGETへリダイレクト(PRGパターン)

レート制限

text
429 Too Many Requests
  推奨ヘッダー:
    Retry-After: 60          (60秒後に再試行可能)
    X-RateLimit-Limit: 100   (制限回数)
    X-RateLimit-Remaining: 0 (残り回数)
    X-RateLimit-Reset: 1672531200(リセット時刻のUNIXタイムスタンプ)

こんなときに使えます

シーンREST APIを実装中にどのステータスコードを返すべきか迷ったとき
得られる情報201(作成成功)・204(削除成功)・422(バリデーションエラー)など、用途に合ったコードをすぐ確認できる

APIデザインのベストプラクティスも合わせて掲載

よくある質問

401と403の違いは何ですか?
401 Unauthorizedは認証(Authentication)されていない状態で、ログインが必要であることを意味します。403 Forbiddenは認証済みだがアクセス権限(Authorization)がない状態です。ログインしていないユーザーには401、ログイン済みでも権限のないリソースへのアクセスには403を使います。
301と302の違いは何ですか?
301 Moved Permanentlyは恒久的なリダイレクトで、SEOのランキング評価が新URLに引き継がれます。302 Foundは一時的なリダイレクトで、元のURLが将来復活する可能性がある場合に使います。301を誤って302で実装するとSEOに悪影響が出る場合があります。
400と422の使い分けを教えてください
400 Bad Requestはリクエストの構文自体が不正な場合(JSONが壊れているなど)に使います。422 Unprocessable Contentはリクエストの構文は正しいが、内容が意味的に処理できない場合(バリデーションエラーなど)に使います。REST APIでは入力検証エラーには422が適切です。