Nova Uptime
ガイドHTTP-status-codes502-bad-gateway503-service-unavailable

開発者向けHTTPステータスコード解説 - 各コードの意味

実例で学ぶHTTPステータスコードの完全リファレンス。各コードの意味と502・404などのよくあるエラーの修正方法を解説します。 — Nova Uptimeはアップタイム、SSL、メール健全性、リンク変更を1つのダッシュボードで監視します。

SN
Sumit Nova Uptime
2026年2月21日 · 26 min read
Share:

HTTPステータスコードを理解すべき理由#

ECサイトの決済中に500エラーが発生し、お客様には「問題が発生しました」と表示されます。しかし、実際に何が起きたのでしょうか?サーバーは正常に動作しています。データベースも稼働しています。原因はまったく別の場所にあるのに、500というコードだけでは何もわかりません。

APIエンドポイントが429エラーを返し、モバイルアプリが再試行メッセージを表示せずにクラッシュしてしまいます。実際にはレートリミッターが正しく機能しているだけなのに、ユーザーはアプリが壊れていると思い込みます。

ステータスページには「すべてのシステムは正常です」と表示されているのに、お客様からはページが403 Forbiddenで読み込めないと報告が入ります。モニタリングがホームページしかチェックしていなかったため、検出できなかったのです。

HTTPステータスコードはシグナルです。何が間違っていて、どこを見ればよいのかを教えてくれます。ただし、各コードの意味を理解していればの話です。

このガイドでは、遭遇する可能性のあるすべてのHTTPステータスコードについて、何がトリガーになるのか、見たときに何をすべきかを解説します。


HTTPステータスコード:全体像#

HTTPレスポンスは5つのクラスに分類されます。

  • 1xx (100-199): 情報レスポンス — 「リクエストを受信、処理中」
  • 2xx (200-299): 成功 — 「すべて正常」
  • 3xx (300-399): リダイレクション — 「別の場所を試してください」
  • 4xx (400-499): クライアントエラー — 「あなた側の問題です」
  • 5xx (500-599): サーバーエラー — 「私たち側の問題です」

各クラスは問題の所在を示します。4xxエラーが出ている場合は、リクエスト側に問題があります(URLの間違い、認証エラー、データの欠落など)。5xxエラーが出ている場合は、サーバー側に問題があります。


2xx 成功ステータスコード(すべて正常)#

200 OK#

意味: リクエストは成功しました。レスポンスボディには要求されたデータが含まれています。

遭遇する場面:

  • ブラウザがウェブページを読み込む
  • APIがJSONデータを返す
  • フォーム送信が成功する

例:

GET /api/users/123
Response: 200 OK
Body: {"id": 123, "name": "John", "email": "john@example.com"}

対応: 不要。すべて正常に動作しています。

201 Created#

意味: リクエストは成功し、新しいリソースが作成されました。レスポンスには新しく作成されたリソースが含まれます。

遭遇する場面:

  • 新しいユーザーを作成するPOSTが201 Createdを返す
  • 新しい注文の作成で201 Createdが返る
  • ファイルアップロードで201 Createdが返る

例:

POST /api/users
Request: {"name": "Jane", "email": "jane@example.com"}
Response: 201 Created
Body: {"id": 456, "name": "Jane", "email": "jane@example.com", "created_at": "2026-02-20T10:00:00Z"}

対応: 不要。リソースが正常に作成されました。

202 Accepted#

意味: リクエストは処理のために受け付けられましたが、まだ処理されていません。非同期処理に使われます。

遭遇する場面:

  • 長時間実行ジョブの送信(動画エンコード、レポート生成など)
  • バッチ処理操作
  • バックグラウンドで処理されるタスク

例:

POST /api/batch-emails/send
Request: {"recipient_ids": [1,2,3,...,10000]}
Response: 202 Accepted
Body: {"job_id": "job_12345", "status": "queued"}

対応: タスクはキューに登録されました。ジョブIDを使って後でステータスを確認してください。

204 No Content#

意味: リクエストは成功しましたが、返すコンテンツがありません。

遭遇する場面:

  • DELETEリクエスト(削除成功、返すものなし)
  • レスポンスボディなしの成功したPATCH
  • Webhookの確認応答

例:

DELETE /api/users/123
Response: 204 No Content
Body: (空)

対応: 不要。アクションは成功しました。


3xx リダイレクションステータスコード(別の場所を試して)#

301 Moved Permanently#

意味: リソースは新しいURLに恒久的に移動しました。検索エンジンはインデックスを更新し、ブラウザは今後のリクエストで新しいURLを使用します。

遭遇する場面:

  • ウェブサイトがwww.oldsite.comからnewsite.comへ移行
  • 古いAPIエンドポイントが新しいものに置き換わった
  • URL構造の変更

例:

GET /old-page.html
Response: 301 Moved Permanently
Header: Location: /new-page.html

対応:

  • ユーザー向け: ブラウザが自動的にリダイレクトに従います(透過的)
  • SEO向け: 恒久的な変更には必ず301を使ってください(Googleはページランクを引き継ぎます)
  • API向け: クライアントは新しいURLに更新する必要があります

302 Found(一時リダイレクト)#

意味: リソースは別のURLに一時的に移動しました。元のURLは依然として有効なため、ブラウザは新しいURLをキャッシュしません。

遭遇する場面:

  • メンテナンス中の一時リダイレクト
  • ログインページへのリダイレクト
  • A/Bテスト(一部のユーザーを一時的に新バージョンへリダイレクト)

例:

GET /products/discount-flash-sale
Response: 302 Found
Header: Location: /products/2026-flash-sale

対応: ブラウザは一時的にリダイレクトに従いますが、元のURLを引き続き主URLとして扱います。

304 Not Modified#

意味: リソースは前回のリクエスト以降変更されていません。キャッシュされたバージョンを使用してください。

遭遇する場面:

  • ブラウザが前回の訪問以降ウェブページが変更されたかを確認(更新日/ETagをチェック)
  • 前回のリクエスト以降データが変わっていない場合、APIが304を返す
  • 変更のないデータの再送を避けて帯域幅を削減

例:

GET /api/user-profile
Request Header: If-Modified-Since: 2026-02-19 10:00:00
Response: 304 Not Modified
Body: (空 — 以前のキャッシュバージョンを使用)

対応: ブラウザ/クライアントはローカルのキャッシュバージョンを使用します。

307 Temporary Redirect#

意味: 302と似ていますが、リダイレクト中もHTTPメソッドが変わらないことが保証されます。

技術的な違い:

  • 302はメソッド変更を許容(リダイレクト後にPOST → GET)
  • 307はメソッドを保持(リダイレクト後もPOST → POST)

遭遇する場面:

  • フォーム送信から確認ページへのリダイレクト(POST → POST)
  • メソッドを保持する必要があるAPIリダイレクト

重要な理由: 古いブラウザでは、POSTのリダイレクトをGETに変換してしまい、フォームデータが失われることがありました。307はこれを防ぎます。


4xx クライアントエラーコード(あなた側の問題)#

400 Bad Request#

意味: リクエストが不正です。サーバーが理解できませんでした。

遭遇する場面:

  • リクエストボディのJSONが不正
  • 必須フィールドの欠落
  • パラメータ形式が不正
  • クエリ文字列の構文エラー

例:

POST /api/users
Request Body: {"name": "Jane" "email": "jane@example.com"}
                              ↑ カンマが欠落
Response: 400 Bad Request
Body: {"error": "Invalid JSON syntax"}

対応:

  • リクエストの書式を確認する
  • JSON構文を検証する
  • 必須フィールドが揃っているか確認する
  • パラメータの型がAPI仕様に合致するか検証する

401 Unauthorized#

意味: 認証が失敗したか、認証情報が欠落しています。あなたが誰なのかを証明できていません。

遭遇する場面:

  • 認証トークンが提供されていない
  • 認証トークンが無効または期限切れ
  • ユーザー名/パスワードが間違っている
  • APIキーが欠落

例:

GET /api/user-profile
(Authorizationヘッダーなし)
Response: 401 Unauthorized
Body: {"error": "Authentication required"}

対応:

  • 有効な認証情報を提供する(ログイン、APIキー、トークンなど)
  • 期限切れトークンを更新する
  • 認証情報が正しいか確認する

403 Forbidden#

意味: 認証は成功しましたが、このリソースにアクセスする権限がありません。

遭遇する場面:

  • ユーザーが他のユーザーのアカウントを削除しようとした
  • 管理者専用エンドポイントへのアクセス試行
  • 別組織のリソースへのアクセス試行
  • 権限/ロール不足

例:

DELETE /api/users/999
(ユーザー123として認証済みで、ユーザー999を削除しようとしている)
Response: 403 Forbidden
Body: {"error": "You can only delete your own account"}

対応:

  • 適切な権限を持つアカウントを使用する
  • 必要に応じて権限の昇格を申請する
  • 正しいリソースにアクセスしているか確認する

404 Not Found#

意味: リソースが存在しないか、サーバーがこのエンドポイントの処理方法を知りません。

遭遇する場面:

  • URLのタイプミス(/users//users)
  • エンドポイントが存在しない
  • 削除されたリソース
  • APIバージョンが間違っている

例:

GET /api/users/nonexistent-id-12345
Response: 404 Not Found
Body: {"error": "User not found"}

対応:

  • URLのスペルを確認する
  • エンドポイントが存在するか確認する
  • API仕様を確認する
  • 別のID/リソースを試す

405 Method Not Allowed#

意味: エンドポイントは存在しますが、このHTTPメソッドをサポートしていません。

遭遇する場面:

  • GETしか受け付けないエンドポイントでPOSTを使用
  • 削除をサポートしないエンドポイントでDELETEを使用
  • PUTのみ許可されているのにPATCHを使用

例:

DELETE /api/domains/123
(domainsエンドポイントでDELETEがサポートされていない場合)
Response: 405 Method Not Allowed
Header: Allow: GET, POST, PUT

対応: 正しいHTTPメソッドを使用してください。レスポンスには通常、有効なメソッドを示すAllowヘッダーが含まれます。

408 Request Timeout#

意味: サーバーがクライアントからのリクエスト受信を待ちすぎて、あきらめました。

遭遇する場面:

  • 大きなファイルをアップロード中の遅いクライアント
  • リクエスト中にネットワーク接続が切断
  • リクエストがサーバーのタイムアウトより長くかかった(通常30〜300秒)

例:

POST /api/upload
(遅い接続で500MBファイルをアップロードするのに10分かかる)
Response: 408 Request Timeout

対応:

  • リクエストを再試行する
  • 大きなリクエストを小さなチャンクに分割する
  • ネットワーク接続を確認する
  • 必要に応じてクライアントのタイムアウトを延ばす

429 Too Many Requests#

意味: リクエストが多すぎます。レート制限を超えました。

遭遇する場面:

  • APIのレート制限に到達(例: 100リクエスト/分)
  • メールを送りすぎた
  • ログインの総当たり攻撃
  • ウェブスクレイパーがサーバーに過度な負荷をかけている

例:

GET /api/users/123
(直近1分間で100回目のリクエスト)
Response: 429 Too Many Requests
Header: Retry-After: 60
Body: {"error": "Rate limit exceeded. Try again in 60 seconds"}

対応:

  • 再試行前に待機する(Retry-Afterヘッダーを確認)
  • 指数バックオフを実装する
  • 大量の結果セットにはページネーションを使用する
  • 再リクエストの代わりにローカルでキャッシュする

5xx サーバーエラーコード(私たち側の問題)#

500 Internal Server Error#

意味: サーバー側で何かが起こりましたが、サーバーは詳細を提供できません。

遭遇する場面:

  • コード内の未処理例外
  • データベース接続失敗
  • メモリ不足
  • 予期しない条件

例:

POST /api/checkout
Response: 500 Internal Server Error
Body: {"error": "Something went wrong"}

なぜ曖昧なのか: サーバーはセキュリティ上の理由で、内部エラーの詳細をクライアントに公開しません。詳細なエラー情報は攻撃者に手がかりを与えてしまいます。

対応:

  • サーバーログで実際のエラーを確認する
  • サードパーティサービスの場合: サポートに連絡する
  • 自社サービスの場合: エラーログを確認し、必要なら再起動、最近のデプロイをロールバックする

501 Not Implemented#

意味: サーバーがこのHTTPメソッドや機能をサポートしていません。

遭遇する場面:

  • サーバーがHTTP/2機能をサポートしていない
  • WebSocketがサポートされていない
  • 一部のHTTPメソッドが実装されていない

例:

OPTIONS /api/users
(サーバーがOPTIONSメソッドをサポートしていない)
Response: 501 Not Implemented

対応: 通常は対応不要 — 別のメソッドやサービスを使ってください。最新のAPIではまれです。

502 Bad Gateway#

意味: サーバーが上流サーバーから無効なレスポンスを受け取りました。

実際のシナリオ:

  1. リバースプロキシ(Nginx)がバックエンドに接続できない

    Client → Nginx (gateway) → Node.js Backend
                    ↑
             バックエンドがダウンまたは応答なし
    
  2. ロードバランサーが正常なバックエンドに到達できない

    Client → Load Balancer → Backend Servers
                          ↑
               すべてのバックエンドがダウンまたは遅延
    
  3. APIゲートウェイがマイクロサービスに到達できない

    Client → API Gateway → Auth Service (down)
                        → User Service
                        → Order Service
    

発生する理由:

  • バックエンドサーバーがクラッシュ
  • ネットワーク接続が失われた
  • 上流サーバーが遅くタイムアウト
  • 上流が不正なレスポンスを返した

例:

GET /dashboard
Response: 502 Bad Gateway

裏側で起きていること:

Nginxがリクエストを受信
localhost:3000のNode.jsサーバーへ転送を試みる
接続拒否(サーバーが起動していない)
Nginxが返したレスポンス: 502 Bad Gateway

対応:

  • バックエンドサービスが稼働中か確認: docker pspm2 status、systemdのステータス
  • バックエンドへのネットワーク接続を確認
  • バックエンドのクラッシュログを確認
  • クラッシュしている場合はバックエンドサービスを再起動
  • ロードバランサーのルーティングが正しいか確認

503 Service Unavailable#

意味: サーバーが一時的にリクエストを処理できません(メンテナンス、過負荷、依存関係のダウンなど)。

遭遇する場面:

  • サーバーが再起動中
  • サーバーが高負荷状態(全接続が使用中)
  • データベースがダウンまたは移行中
  • サードパーティの依存関係がダウン
  • デプロイ進行中(トラフィックが一時停止)

例:

GET /api/users
Response: 503 Service Unavailable
Header: Retry-After: 600
Body: {"error": "Server is undergoing maintenance. Try again in 10 minutes"}

メンテナンス時に503を返す理由:

  • クライアントに「これは一時的なものなので後でやり直してください」と伝える
  • ブラウザやクライアントが自動的に再試行することを把握できる
  • 検索エンジンは503を不利に扱わない(500はバグのように見えるが、503はそうではない)

対応:

  • 待ってから再試行する(Retry-Afterヘッダーで待ち時間を確認)
  • ステータスページでメンテナンス時間枠を確認
  • 内部サービスの場合: デプロイ完了を待ち、ログを確認

504 Gateway Timeout#

意味: サーバーが上流サーバーから時間内にレスポンスを受け取れませんでした。

遭遇する場面:

  • バックエンドサーバーが遅すぎる
  • ネットワーク遅延が高すぎる
  • データベースクエリに時間がかかりすぎている
  • 上流サーバーがハングしている

例:

バックエンドリクエスト:
GET /api/heavy-report
30秒待機...
タイムアウト!
Response: 504 Gateway Timeout

実例の原因:

Client → Nginx (30秒タイムアウト) → Node.js Backend (60秒のクエリ)
                                  ↑
                  Nginxは30秒であきらめる
                  バックエンドはまだクエリを実行中

対応:

  • バックエンドのパフォーマンスを確認する
  • 遅いデータベースクエリを探す
  • コードを最適化する
  • データベースインデックスを追加する
  • 操作が正当に長くかかる場合はタイムアウトを延ばす
  • 長い操作は非同期ジョブに分割する

HTTPステータスコード リファレンス表#

コード名称カテゴリ意味
200OK成功リクエスト成功
201Created成功リソース作成済み
202Accepted成功リクエストを処理キューに登録
204No Content成功成功、レスポンスボディなし
301Moved Permanentlyリダイレクト恒久的に新しいURLを使用
302Foundリダイレクト一時的に別のURL
304Not Modifiedリダイレクトキャッシュバージョンを使用
307Temp Redirectリダイレクトリダイレクト時にHTTPメソッドを保持
400Bad Requestクライアントエラー不正なリクエスト
401Unauthorizedクライアントエラー認証が必要
403Forbiddenクライアントエラーアクセス拒否
404Not Foundクライアントエラーリソースが存在しない
405Method Not AllowedクライアントエラーHTTPメソッドが間違い
408Request Timeoutクライアントエラーリクエストが時間切れ
429Too Many Requestsクライアントエラーレート制限
500Internal Server Errorサーバーエラー一般的なサーバーエラー
501Not Implementedサーバーエラー機能が未サポート
502Bad Gatewayサーバーエラー上流サーバーのエラー
503Service Unavailableサーバーエラーサーバーが一時的にダウン
504Gateway Timeoutサーバーエラー上流が遅すぎる

HTTPステータスコードの問題をデバッグする方法#

ステップ1: ステータスコードを特定する#

ブラウザの場合:

  1. デベロッパーツールを開く(F12)
  2. Networkタブに移動
  3. 失敗したリクエストを確認
  4. Status列にコードが表示される

ターミナルの場合:

curl -i https://example.com/endpoint
# 1行目に表示: HTTP/1.1 200 OK

アプリケーションの場合:

  • エラーログを確認する
  • レスポンスオブジェクトを確認する
  • ほとんどのフレームワークはステータスコードを露出している

ステップ2: 意味を理解する#

カテゴリを使いましょう。

  • 2xx? 想定通りに動作している
  • 3xx? リダイレクト先を確認
  • 4xx? リクエストの形式と権限を確認
  • 5xx? サーバーログと上流の依存関係を確認

ステップ3: レスポンスボディとヘッダーを確認する#

レスポンスボディ: ほとんどのAPIはエラーの詳細を含めます。

{
  "error": "User not found",
  "message": "No user with ID 12345",
  "code": "USER_NOT_FOUND"
}

レスポンスヘッダー: 重要なものは以下です。

  • Retry-After — 再試行までの待ち時間(429、503)
  • Allow — 有効なHTTPメソッド(405)
  • Location — リダイレクト先(3xx)
  • WWW-Authenticate — 認証方法(401)

ステップ4: コードクラスに応じた対応を取る#

4xx クライアントエラー:

  • 間違ったデータを送りましたか?リクエストを修正
  • URLにタイプミスはありますか?修正
  • 権限がありませんか?アクセスを申請
  • エンドポイントが間違っていますか?仕様を確認

5xx サーバーエラー:

  • サーバーは稼働中ですか?稼働状況を確認
  • ログにエラーが出ていますか?エラーを修正
  • 上流がダウンしていますか?復旧を待つ
  • デプロイされましたか?必要ならロールバック

実例: 502 Bad Gatewayをデバッグする#

シナリオ:

GET /api/checkout
Response: 502 Bad Gateway
お客様が購入を完了できない

ステップ1: 502であることを確認 ✓ レスポンスヘッダーにHTTP/1.1 502 Bad Gatewayと表示

ステップ2: 502の意味を確認 ✓ 上流サーバーが正しく応答していない

ステップ3: 問題の診断

バックエンドサービスは稼働中ですか?

docker ps
# 出力: checkout-serviceが稼働していない

✗ checkoutサービスがクラッシュ

ステップ4: 根本原因を特定

ログを確認:

docker logs checkout-service
# Out of memory error!
# Java heap space exhausted

ステップ5: 修正

メモリを増やす:

docker-compose up -d --build

または再起動:

docker restart checkout-service

ステップ6: 検証

curl -i https://api.example.com/api/checkout
# HTTP/1.1 200 OK ✓

ステータスコードをリアルタイムにモニタリングする

モニタリングすべき理由

  • お客様より先にダウンタイムを検出する
  • 特定エンドポイントだけに影響する5xxエラーをキャッチする
  • 4xxエラーを追跡してAPIの誤用を発見する
  • 429のレート制限を監視してスケーリングのタイミングを判断する

何を監視すべきか

重大(ダウンしたら即通知):

  • 重要なエンドポイント(checkout、login、payment)での5xxエラー

重要(調査が必要):

  • 429エラーの急増(レート制限はキャパシティに近づいているサイン)
  • 502/504エラーの増加(上流の劣化)
  • 403/401エラーの増加(総当たり攻撃の可能性)

情報(トレンドの追跡):

  • 404エラー(間違ったURLがリクエストされている?)
  • 400エラー(クライアントが不正なリクエストを送っている?)

Nova Uptimeでステータスコードを監視する#

Nova UptimeのアップタイムモニタリングはHTTPステータスコードをリアルタイムで追跡します。

  1. モニターが200を返す? サイトは稼働中 ✓
  2. モニターが404を返す? URLが間違っているかエンドポイントが削除された ✗
  3. モニターが429を返す? レート制限を受けている ⚠️
  4. モニターが502/503を返す? バックエンドの問題 ✗
  5. モニターが504を返す? タイムアウト、最適化が必要 ⚠️

Nova Uptimeでは以下が確認できます。

  • どのステータスコードが返されているか
  • いつ発生し始めたか
  • どのエンドポイントが影響を受けているか
  • 時系列での推移

HTTPステータスコードとSEO#

検索エンジンはステータスコードを使ってページのインデックス方法を判断します。

200 OK: このページをインデックスする(通常)

301 Moved Permanently: インデックスを更新して新しいURLを指す

302 Found: 古いURLをインデックスに保持し、リダイレクトに従わない

304 Not Modified: 再クロールしない、最新版が現行

401/403: インデックスしない(アクセス拒否)

404 Not Found: インデックスから削除(ページが消えた)

410 Gone: インデックスから削除(ページが消え、戻ってこない)

429/503/504: あとで再試行(一時的な問題)

5xxエラー: サイトの問題の可能性あり、Googleはクロールを減速させる

サイトの健全性で重要なポイント:

  • 恒久的なURL変更には301を使う(SEO評価を維持)
  • 410を使ってページが消えたことを明示的にGoogleへ伝える
  • 5xxエラーはすぐに修正する(Googleは壊れているサイトを後回しにする)
  • インデックス対象外のコンテンツでの404を防ぐためにrobots.txtを実装する

まとめ:HTTPステータスコード クイックリファレンス#

すべて正常:

  • 200 OK — 通常の成功
  • 201 Created — 新しいリソースが作成された
  • 204 No Content — 成功、レスポンス不要

別の場所へリダイレクト:

  • 301/302 — 新しいURLへリダイレクトに従う
  • 304 — キャッシュバージョンを使用

あなたが間違えた:

  • 400 Bad Request — リクエストの形式を修正
  • 401 Unauthorized — 認証情報を提供
  • 403 Forbidden — 権限がない
  • 404 Not Found — URLが間違い
  • 429 Too Many Requests — ペースを落とす、レート制限を受けている

私たちが間違えた:

  • 500 Internal Server Error — サーバーログを確認
  • 502 Bad Gateway — バックエンドサービスがダウン
  • 503 Service Unavailable — サーバーが一時的にダウン
  • 504 Gateway Timeout — バックエンドが遅すぎる

Nova Uptimeでモニタリング: Nova UptimeのHTTPモニタリングはこれらのエラーを即座にキャッチし、お客様が気づく前に通知します。重要なエンドポイントを監視し、ステータスコードのトレンドを追跡し、5xxエラーが急増したらアラートを受け取れます。


最終更新日: 2026年2月20日

Monitor Your Website Before It Goes Down

Get uptime monitoring, SSL tracking, domain expiry alerts, and email health checks. Free plan — no credit card required.

Start Monitoring Free