コンテンツにスキップ

HTTP ステータスコード完全ガイド|よくあるエラーの原因と対処法

カテゴリ:HTTP・Web 開発

API を開発していて 422 が返ってきた。本番で突然 502 が出始めた。リダイレクトが 301 なのか 302 なのかで SEO への影響が変わる。HTTP ステータスコードは Web 開発の共通言語であり、正しく理解することがトラブルシューティングの第一歩です。

ステータスコードの 5 つのカテゴリ

レンジカテゴリ意味
1xxInformationalリクエストを受信し処理中
2xxSuccessリクエスト成功
3xxRedirection追加アクションが必要 (リダイレクト)
4xxClient Errorクライアント側の問題
5xxServer Errorサーバー側の問題

開発者が最もよく遭遇するコード

200 OK — 成功

最も基本的な成功レスポンス。API が期待通りに動いている。

301 Moved Permanently — 永続リダイレクト

URL が恒久的に変わった場合に使う。<strong>SEO 上、旧 URL の評価が新 URL に引き継がれる</strong>ため、サイト移転やHTTPS化で必須。Google は 301 を「シグナルの転送」として扱う。

<strong>よくある問題</strong>: 301 のつもりで 302 を返しているケース。Apache の <code>Redirect</code> はデフォルト 302。<code>Redirect 301</code> と明示する。

302 Found — 一時リダイレクト

一時的な転送。A/B テストやメンテナンス中の迂回に使う。SEO 評価は転送されない。

304 Not Modified — キャッシュ有効

ブラウザが <code>If-Modified-Since</code> や <code>If-None-Match</code> ヘッダで条件付きリクエストを送った結果、リソースが変わっていない場合に返す。<strong>ボディは送信されない</strong>ため帯域を節約できる。

400 Bad Request — リクエスト不正

サーバーがリクエストを解析できない。原因: 不正な JSON、必須パラメータ欠落、Content-Type 不一致。

# よくあるミス: Content-Type を指定していない
curl -X POST https://api.example.com/users -d '{"name":"Alice"}'
# → 400 (Content-Type: application/json が必要)

# 正しい
curl -X POST https://api.example.com/users \
  -H 'Content-Type: application/json' \
  -d '{"name":"Alice"}'

401 Unauthorized — 認証必要

認証情報が無いか無効。Bearer トークンの期限切れ、API Key の誤り。

403 Forbidden — アクセス拒否

認証は通ったが権限が無い。管理者専用エンドポイントに一般ユーザーがアクセスした場合など。401 との違いは「認証の有無」vs「権限の有無」。

404 Not Found — リソースなし

最も有名なエラー。URL のタイプミス、削除されたページ、ルーティング設定ミス。SEO 上は <code>410 Gone</code> で「意図的に削除した」と示す方が望ましいケースもある。

413 Payload Too Large — サイズ超過

ファイルアップロードで頻出。Nginx の <code>client_max_body_size</code> (デフォルト 1MB)、PHP の <code>upload_max_filesize</code>、API Gateway の制限を確認。

422 Unprocessable Entity — バリデーションエラー

JSON の構文は正しいがビジネスロジック上不正 (メールアドレスの形式が不正、必須フィールドの値が空、など)。REST API のバリデーションエラーはこれを返すのが主流。

429 Too Many Requests — レート制限

短時間にリクエストを送りすぎた。<code>Retry-After</code> ヘッダに待つべき秒数が示される。対策: 指数バックオフ (exponential backoff) を実装。

500 Internal Server Error — サーバー内部エラー

未処理の例外、NULL 参照、設定ファイルの誤り。<strong>最も危険なエラー</strong>。サーバーログを必ず確認。

502 Bad Gateway — 上流サーバー異常

リバースプロキシ (Nginx) が上流の PHP-FPM / Node.js / Python WSGI に接続できないか不正な応答を受けた。上流プロセスの再起動、メモリ不足、ソケット接続のタイムアウトを確認。

503 Service Unavailable — サービス一時停止

メンテナンス中や過負荷。<code>Retry-After</code> ヘッダを付けてクライアントに待機を伝える。

504 Gateway Timeout — 上流タイムアウト

上流サーバーが時間内に応答しなかった。重い DB クエリ、外部 API の遅延。Nginx の <code>proxy_read_timeout</code> を確認。

DevLab のステータスコード検索ツール

<a href="/ja/tools/http-status/">HTTP ステータスコード検索ツール</a> では、コード番号やキーワード (例: "redirect", "forbidden", "timeout") で即座に検索でき、各コードの意味・原因・対処法を一覧で確認できます。ブラウザ完結で登録不要。

関連ツール: <a href="/ja/check/headers/">HTTP ヘッダー検証</a>、<a href="/ja/check/redirect-chain/">リダイレクトチェーン追跡</a>、<a href="/ja/check/security/">セキュリティ診断</a>。

まとめ

HTTP ステータスコードはサーバーとクライアントの共通言語。特に 301 vs 302 の SEO 影響、400 vs 422 のバリデーション使い分け、500 系のインフラ診断は頻出知識です。困ったらまずステータスコードを確認し、上記の対処法を当てはめてください。

📚 リファレンス