一覧表で一気に確認!HTTPステータスコード・チートシート
ネットワーク関係でいつもつきまとうHTTPステータスコード、「なんだっけ、これ」となることが多いのでまとめました。
目次
HTTPステータスコードについて
この記事に辿り着いた方で「ナニソレ」と言う方もいないと思いますが、ステータスコードは、超ザックリいえばこんな感じで定義されたものです。
- 形式:3桁の数字
- 1桁目:レスポンスのクラス(1-5)
- 2-3桁目:詳細な状態
- RFC定義:RFC 2616, 7231, 6585等で標準化
以下、具体的な内容をまとめました。
1xx(100番台):情報レスポンス
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
100 | Continue | リクエストの前半部分を受け付けた | ・大容量ファイルアップロード時の継続確認 ・クライアントの続行許可判断用 |
101 | Switching Protocols | プロトコル切り替え承諾 | ・WebSocketへの切り替え ・HTTP/2への切り替え時 |
102 | Processing (WebDAV) | 処理継続中 | ・長時間処理での進捗表示 ・タイムアウト防止用 |
103 | Early Hints | 予備レスポンス | ・リソースのプリロード指示 ・レンダリング最適化用 |
2xx(200番台):成功レスポンス
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
200 | OK | リクエスト成功 | ・通常のリクエスト成功時 ・正常系の基本レスポンス |
201 | Created | リソース作成成功 | ・POST成功時 ・新規レコード作成時 |
202 | Accepted | 処理受付完了(結果は未確定) | ・非同期処理開始時 ・バッチ処理登録時 |
203 | Non-Authoritative Information | 変更された情報での成功 | ・プロキシでの変更を含む応答 ・キャッシュ経由の応答 |
204 | No Content | 成功だが返信内容なし | ・DELETE成功時 ・更新処理完了時 |
205 | Reset Content | 成功、クライアントのリセット要求 | ・フォームクリア指示 ・画面リフレッシュ要求 |
206 | Partial Content | 部分的な成功 | ・範囲リクエスト成功時 ・動画の部分再生時 |
207 | Multi-Status (WebDAV) | 複数ステータスの統合 | ・複数リソースの一括操作結果 ・WebDAV操作結果 |
208 | Already Reported (WebDAV) | 既報告内容の重複回避 | ・WebDAVでのバインディング報告 ・重複レポート抑制用 |
226 | IM Used (HTTP Delta encoding) | 差分エンコーディング使用 | ・差分転送時 ・帯域最適化時 |
3xx(300番台):リダイレクト
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
300 | Multiple Choices | 複数のリソース候補が存在 | ・複数フォーマット選択時 ・言語選択時 |
301 | Moved Permanently | 恒久的な移動 | ・サイト移転時 ・URL構造変更時 |
302 | Found | 一時的な移動 | ・メンテナンス時転送 ・一時的なリダイレクト |
303 | See Other | 別URLでの結果参照指示 | ・POST後のGETリダイレクト ・処理結果確認画面へ誘導 |
304 | Not Modified | 未更新(キャッシュ利用可) | ・条件付きGETの更新なし ・キャッシュ有効活用 |
305 | Use Proxy (非推奨) | プロキシ経由要求 | ※セキュリティ上の理由で非推奨 |
306 | (Unused) | 未使用 | ※将来の使用のために予約 |
307 | Temporary Redirect | 一時的な移動(メソッド保持) | ・負荷分散時 ・メソッド維持必須時 |
308 | Permanent Redirect | 恒久的な移動(メソッド保持) | ・APIエンドポイント移動 ・永続的なメソッド維持 |
4xx(400番台):クライアントエラー
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
400 | Bad Request | 不正なリクエスト | ・パラメータ不正 ・構文エラー |
401 | Unauthorized | 認証必要 | ・未ログイン ・認証切れ |
402 | Payment Required | 支払い必要 | ・有料サービス ・支払い要求 |
403 | Forbidden | アクセス権限なし | ・権限不足 ・IP制限 |
404 | Not Found | リソース非存在 | ・存在しないページ ・削除済みコンテンツ |
405 | Method Not Allowed | 許可されないメソッド | ・POSTのみのURLにGET ・許可外メソッド |
406 | Not Acceptable | 受入不可能な応答 | ・対応不可能なAcceptヘッダ ・非対応フォーマット |
407 | Proxy Authentication Required | プロキシ認証必要 | ・プロキシ認証要求 ・中間認証必要 |
408 | Request Timeout | リクエスト待機時間超過 | ・クライアント処理遅延 ・通信タイムアウト |
409 | Conflict | リソースの競合 | ・同時編集衝突 ・楽観的ロック違反 |
410 | Gone | リソース永久削除 | ・完全削除済み ・アーカイブ済み |
411 | Length Required | Content-Length必須 | ・サイズ指定必須 ・転送量確認用 |
412 | Precondition Failed | 前提条件不一致 | ・条件付きリクエスト失敗 ・If-Match不一致 |
413 | Payload Too Large | リクエスト容量超過 | ・ファイルサイズ超過 ・データ量制限超過 |
414 | URI Too Long | URIが長すぎる | ・GET文字数制限超過 ・URL長制限違反 |
415 | Unsupported Media Type | 未対応のメディア形式 | ・非対応ファイル形式 ・Content-Type不正 |
416 | Range Not Satisfiable | 範囲指定不可 | ・範囲外リクエスト ・部分取得範囲エラー |
417 | Expectation Failed | Expectヘッダ非対応 | ・Expectヘッダ非対応 ・事前条件不成立 |
418 | I’m a teapot | (エイプリルフール用) | ・HTCPCP仕様のジョーク ・実運用では未使用 |
421 | Misdirected Request | 不正な接続先 | ・SNI不一致 ・接続先サーバー不正 |
422 | Unprocessable Entity | 処理不能なエンティティ | ・バリデーションエラー ・意味的なエラー |
423 | Locked (WebDAV) | リソースロック中 | ・編集ロック中 ・アクセスロック |
424 | Failed Dependency (WebDAV) | 依存関係による失敗 | ・関連処理の失敗 ・依存処理エラー |
425 | Too Early | リプレイ攻撃の危険性 | ・早すぎるリクエスト ・TLS暗号化前の通信 |
426 | Upgrade Required | プロトコル更新必要 | ・TLS必須 ・プロトコル変更要求 |
428 | Precondition Required | 前提条件必須 | ・条件付きリクエスト必須 ・If-Match必須 |
429 | Too Many Requests | リクエスト過多 | ・レート制限超過 ・アクセス制限 |
431 | Request Header Fields Too Large | ヘッダーが大きすぎる | ・ヘッダーサイズ超過 ・Cookie過多 |
451 | Unavailable For Legal Reasons | 法的理由による利用不可 | ・規制対象コンテンツ ・法的削除要請 |
ちなみに、非標準のステータスコードとして、Nginxの独自コードが存在します。
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
499 | Client Closed Request (Nginx) | クライアントが接続を切断 | ・ユーザーによる読み込み中断 ・クライアントのタイムアウト ・モバイル通信の切断 ・ブラウザバック/閉じる操作 |
5xx(500番台):サーバーエラー
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
500 | Internal Server Error | サーバー内部エラー | ・予期せぬエラー ・実装バグ |
501 | Not Implemented | 未実装機能 | ・対応予定機能 ・未実装メソッド |
502 | Bad Gateway | ゲートウェイエラー | ・バックエンドエラー ・upstream障害 |
503 | Service Unavailable | サービス利用不可 | ・メンテナンス中 ・過負荷 |
504 | Gateway Timeout | ゲートウェイタイムアウト | ・バックエンド遅延 ・内部処理タイムアウト |
505 | HTTP Version Not Supported | 非対応HTTPバージョン | ・HTTPバージョン非対応 ・プロトコルバージョンエラー |
506 | Variant Also Negotiates | 内部設定ミス | ・コンテンツネゴシエーション循環 ・設定ミス |
507 | Insufficient Storage (WebDAV) | ストレージ容量不足 | ・ディスク容量不足 ・クォータ超過 |
508 | Loop Detected (WebDAV) | 無限ループ検出 | ・WebDAV処理ループ ・依存関係循環 |
510 | Not Extended | 拡張必要 | ・必要な拡張未対応 ・追加設定必要 |
511 | Network Authentication Required | ネットワーク認証必要 | ・キャプティブポータル ・ネットワーク認証要求 |
こちらも499同様、非標準のステータスコードとして、Nginxの独自コードが存在します。
コード | 名前 | 説明 | 実務での用途・対応 |
---|---|---|---|
599 | Network Connect Timeout Error (Nginx) | ネットワーク接続タイムアウト | ・upstreamサーバーへの接続タイムアウト ・ネットワーク障害 ・バックエンドサーバーの過負荷 ・DNS解決失敗 |
実装時のポイント
以下、メモ書きです。
1. セキュリティ関連
- 401/403の使い分け
- 401:認証が必要
- 403:認証済みだが権限なし
- 404の使用
- セキュリティ上、403を404として返す場合も
2. パフォーマンス最適化
- 304の積極活用
- 206による部分取得の実装
- 429によるレート制限の実装
3. 運用監視のポイント
- 5xxの監視は必須
- 4xxの急増にも注意
- タイムアウト系(408, 504)の傾向分析
4. クライアントへの配慮
- わかりやすいエラーページ
- 適切なリダイレクト設計
- レスポンスヘッダーの適切な設定
5. 障害対応
- ログの確認
- エラーの切り分け
- 原因の特定
- 一時対応
- 恒久対応
補足事項
- すべてのステータスコードを実装する必要はない
- サービスに必要なコードを適切に選択
- セキュリティとユーザビリティのバランスを考慮
- 必要に応じて独自のエラーコード体系を検討
ディスカッション
コメント一覧
まだ、コメントがありません