ステータスコードって知っていますか?私は開発者として知っている1つの共通言語だと思う.知っておくことは必須級であると思う.本記事ではステータスコードについての説明から,対処法まで説明する.
他のチートシート
Dockerコマンド
TypeScript
git/gh コマンド
SQL
プルリクエスト・マークダウン記法チートシート
ファイル操作コマンドチートシート
Vim
HTTPステータスコードとは
HTTPステータスコードは,Webサーバーからクライアントへのレスポンスの状態を示す3桁の数字である.これらのコードは,HTTPリクエストの結果を簡潔に表現し,クライアントに対してサーバーの応答状態を伝える重要な役割を果たす.
主な特徴
1. 3桁の数字で構成
- 1桁目がクラスを示し,2桁目と3桁目が詳細な状態を示す.
2. 5つの主要クラス
- 1xx: 情報
- 2xx: 成功
- 3xx: リダイレクト
- 4xx: クライアントエラー
- 5xx: サーバーエラー
3. 標準化
- Internet Engineering Task Force (IETF) によって標準化されている.
- HTTP/1.1 の仕様に定義されている.
4. 拡張性
- 新しいステータスコードを追加することができる.
5. テキスト説明
- 各ステータスコードには短いテキスト説明(リーズンフレーズ)が付随する.
ステータスコードの役割
1. 通信状態の明確化
- リクエストの成功や失敗,追加のアクションの必要性を示す.
2. エラー診断
- 問題が発生した場合,その原因を特定するのに役立つ.
3. プログラムの制御
- クライアントアプリケーションがステータスコードに基づいて動作を変更できる.
4. ブラウザの動作制御
- ブラウザはステータスコードに基づいて特定のアクションを実行する.
5. SEOへの影響
- 検索エンジンはステータスコードを利用してウェブページの状態を理解する.
6. キャッシュ制御
- 特定のステータスコード(例:304 Not Modified)はキャッシュの動作に影響を与える.
例
- 200 OK: リクエストが成功した.
- 404 Not Found: リクエストされたリソースが見つからない.
- 500 Internal Server Error: サーバー内部でエラーが発生した.
これは後で説明する.
HTTPステータスコードを学ぶ意義
ステータスコードを学ぶ意義は多岐にわたるが一旦まとめてみる
1. 効率的なトラブルシューティング
- 問題の迅速な特定: ステータスコードを理解することで,ウェブアプリケーションやAPIの問題を素早く特定できる.
- 的確な対応: 各コードの意味を知ることで,適切な対処方法を迅速に選択できる.
2. ユーザー体験の向上
- エラーメッセージの改善: 適切なステータスコードに基づいて,ユーザーにわかりやすいエラーメッセージを提供できる.
- リダイレクトの適切な処理: 3xxコードを正しく扱うことで,スムーズなナビゲーションを実現できる.
3. セキュリティの強化
- 脆弱性の把握: 特定のステータスコード(例:401,403)を適切に使用することで,セキュリティ上の問題を明確に示せる.
- 情報漏洩の防止: ステータスコードを適切に設定することで,不要な情報の露出を防ぐことができる.
4. APIの設計と開発
- RESTful API設計: 適切なステータスコードを使用することで,直感的で標準的なAPIを設計できる.
- クライアント側の処理の最適化: クライアントアプリケーションがステータスコードに基づいて適切に動作するよう設計できる.
5. パフォーマンスの最適化
- キャッシュの適切な利用: 304 Not Modifiedなどのコードを活用し,ネットワークトラフィックを削減できる.
- リソース利用の効率化: 適切なステータスコードを返すことで,不要な再試行や処理を防ぐことができる.
6. コミュニケーションの円滑化
- 開発者間の共通言語: ステータスコードは開発者間で広く理解されている共通言語であり,コミュニケーションを容易にする.
- クライアント-サーバー間の明確な情報交換: ステータスコードにより,クライアントとサーバー間で状況を明確に伝達できる.
7. 標準規格への準拠
- 互換性の確保: HTTPの標準に準拠することで,異なるシステム間の互換性を高めることができる.
- 将来の拡張性: 新しいステータスコードが追加された際にも,スムーズに対応できる.
8. モニタリングと分析の改善
- システムの健全性評価: ステータスコードの分布を分析することで,システムの全体的な健全性を評価できる.
- ユーザー行動の理解: 特定のステータスコードの頻度を監視することで,ユーザーの行動パターンや問題を把握できる.
HTTPステータスコード一覧と対処例
1xx 情報
100 Continue
- 説明: リクエストの継続を示す.
101 Switching Protocols
- 説明: プロトコルの切り替えを要求する.
102 Processing
- 説明: サーバーがリクエストを処理中であることを示す.
103 Early Hints
- 説明: レスポンスのヘッダーを先行して送信する.
2xx 成功
200 OK
- 説明: リクエストが成功した.
- 対処例: 正常に処理されたため,特別な対処は不要である.
201 Created
- 説明: リクエストが成功し,新しいリソースが作成された.
- 対処例: 新しく作成されたリソースのURIを確認し,必要に応じて利用する.
202 Accepted
- 説明: リクエストは受け入れられたが,処理はまだ完了していない.
- 対処例: 処理の完了を待つ,または後で結果を確認する.
203 Non-Authoritative Information
- 説明: 返された情報は元のサーバーからのものではない.
- 対処例: 情報の信頼性を考慮し,必要に応じて元のソースを確認する.
204 No Content
- 説明: リクエストに対するボディを含まないレスポンス.
- 対処例: クライアントの状態を更新せず,現在のビューを維持する.
205 Reset Content
- 説明: ブラウザのビューをリセットするよう指示する.
- 対処例: フォームの入力欄をクリアするなど,ビューをリセットする.
206 Partial Content
- 説明: 部分的なGETリクエストが成功した.
- 対処例: 受信したコンテンツの範囲を確認し,必要に応じて残りの部分をリクエストする.
207 Multi-Status
- 説明: 複数のステータスを含む.
- 対処例: 各リソースのステータスを個別に確認し,適切に処理する.
208 Already Reported
- 説明: DAV binding memberが既に列挙されている.
- 対処例: 重複を避けるため,既に報告された情報を無視する.
226 IM Used
- 説明: GETリクエストに対する応答が1つ以上の操作の結果である.
- 対処例: サーバーが適用した変換を考慮してコンテンツを処理する.
3xx リダイレクト
300 Multiple Choices
- 説明: リクエストに対して複数の選択肢がある.
- 対処例: ユーザーに選択肢を提示するか,デフォルトの選択肢を自動的に選ぶ.
301 Moved Permanently
- 説明: リソースが恒久的に移動した.
- 対処例: 新しいURLを使用するようにリンクを更新する.
302 Found
- 説明: リソースが一時的に移動した.
- 対処例: 提供された新しいURLにリクエストを再送信する.
303 See Other
- 説明: 別のURLにGETリクエストを送るよう指示する.
- 対処例: 指定されたURLに新しいGETリクエストを送信する.
304 Not Modified
- 説明: リソースは変更されていない.
- 対処例: キャッシュされたバージョンを使用する.
305 Use Proxy
- 説明: プロキシを使用してリソースにアクセスする必要がある.
- 対処例: 指定されたプロキシを通じてリソースにアクセスする.
307 Temporary Redirect
- 説明: 一時的なリダイレクト.
- 対処例: 元のリクエストメソッドを維持したまま,新しいURLにリクエストを再送信する.
308 Permanent Redirect
- 説明: 恒久的なリダイレクト.
- 対処例: 元のリクエストメソッドを維持したまま,新しいURLにリクエストを再送信し,リンクを更新する.
4xx クライアントエラー
400 Bad Request
- 説明: サーバーがリクエストを理解できない.
- 対処例: リクエストの構文を確認し,修正する.
401 Unauthorized
- 説明: 認証が必要である.
- 対処例: 適切な認証情報を提供してリクエストを再試行する.
402 Payment Required
- 説明: 将来の使用のために予約されている.
- 対処例: 現在は一般的に使用されていないが,支払いが必要な場合は指示に従う.
403 Forbidden
- 説明: アクセスが禁止されている.
- 対処例: アクセス権限を確認し,必要に応じて権限を取得する.
404 Not Found
- 説明: リソースが見つからない.
- 対処例: URLが正しいか確認し,存在しないリソースへのリンクを修正する.
405 Method Not Allowed
- 説明: 許可されていないHTTPメソッドである.
- 対処例: 適切なHTTPメソッドを使用してリクエストを再送信する.
406 Not Acceptable
- 説明: 受け入れ可能なレスポンスがない.
- 対処例: クライアントの受け入れ条件を緩和するか,サーバーの設定を変更する.
407 Proxy Authentication Required
- 説明: プロキシでの認証が必要である.
- 対処例: プロキシサーバーに適切な認証情報を提供する.
408 Request Timeout
- 説明: リクエストがタイムアウトした.
- 対処例: ネットワーク接続を確認し,リクエストを再試行する.
409 Conflict
- 説明: リクエストが現在のリソースの状態と競合している.
- 対処例: リソースの現在の状態を確認し,競合を解決してからリクエストを再試行する.
410 Gone
- 説明: リソースが永久に利用不可能になった.
- 対処例: リソースへの参照を削除し,代替リソースがあればそれを使用する.
411 Length Required
- 説明: Content-Lengthヘッダーが必要である.
- 対処例: リクエストにContent-Lengthヘッダーを追加する.
412 Precondition Failed
- 説明: 前提条件が満たされていない.
- 対処例: リクエストの前提条件を確認し,必要に応じて修正する.
413 Payload Too Large
- 説明: リクエストエンティティが大きすぎる.
- 対処例: リクエストのペイロードサイズを削減する.
414 URI Too Long
- 説明: リクエストURIが長すぎる.
- 対処例: URIを短縮するか,POSTメソッドを使用してデータを送信する.
415 Unsupported Media Type
- 説明: サポートされていないメディアタイプである.
- 対処例: サーバーがサポートするメディアタイプを使用する.
416 Range Not Satisfiable
- 説明: リクエストされた範囲が満たせない.
- 対処例: 有効な範囲を指定してリクエストを再試行する.
417 Expectation Failed
- 説明: Expectヘッダーの要求を満たせない.
- 対処例: Expectヘッダーを削除するか,サーバーの能力に合わせて修正する.
418 I'm a teapot
- 説明: エイプリルフールのジョーク
- 対処例: 通常は対処不要.ユーモアを楽しむ
421 Misdirected Request
- 説明: サーバーがリクエストを処理できない.
- 対処例: 正しいサーバーにリクエストを送信する.
422 Unprocessable Entity
- 説明: リクエストは理解できるが,処理できない.
- 対処例: リクエストのセマンティクスを確認し,修正する.
423 Locked
- 説明: リソースがロックされている.
- 対処例: リソースのロックが解除されるのを待つか,ロック解除をリクエストする.
424 Failed Dependency
- 説明: 前のリクエストの失敗により,このリクエストも失敗した.
- 対処例: 依存関係にあるリクエストを修正し,再試行する.
425 Too Early
- 説明: リプレイ攻撃を防ぐためにリクエストを拒否した.
- 対処例: 適切なタイミングでリクエストを再試行する.
426 Upgrade Required
- 説明: クライアントはプロトコルをアップグレードする必要がある.
- 対処例: 指定されたプロトコルにアップグレードしてリクエストを再試行する.
428 Precondition Required
- 説明: 前提条件が必要である.
- 対処例: 必要な前提条件を追加してリクエストを再試行する.
429 Too Many Requests
- 説明: クライアントが短時間に多すぎるリクエストを送信した.
- 対処例: レートリミットを遵守し,適切な間隔を空けてリクエストを送信する.
431 Request Header Fields Too Large
- 説明: ヘッダーフィールドが大きすぎる.
- 対処例: ヘッダーフィールドのサイズを削減する.
451 Unavailable For Legal Reasons
- 説明: 法的理由により利用できない.
- 対処例: 法的制限を確認し,必要に応じて適切な権限を取得する.
5xx サーバーエラー
500 Internal Server Error
- 説明: サーバー内部でエラーが発生した.
- 対処例: サーバー管理者に連絡し,エラーログを確認して問題を修正する.
501 Not Implemented
- 説明: サーバーがリクエストを実行する機能を持っていない.
- 対処例: サーバーの機能を拡張するか,サポートされている機能のみを使用する.
502 Bad Gateway
- 説明: ゲートウェイサーバーが無効な応答を受け取った.
- 対処例: バックエンドサーバーの状態を確認し,必要に応じて修正する.
503 Service Unavailable
- 説明: サーバーが一時的に利用できない.
- 対処例: サーバーの負荷を軽減し,後でリクエストを再試行する.
504 Gateway Timeout
- 説明: ゲートウェイがタイムアウトした.
- 対処例: バックエンドサーバーの応答時間を改善し,必要に応じてタイムアウト設定を調整する.
505 HTTP Version Not Supported
- 説明: サポートされていないHTTPバージョンである.
- 対処例: サポートされているHTTPバージョンを使用する.
506 Variant Also Negotiates
- 説明: 内部構成エラーがある.
- 対処例: サーバーの設定を見直し,コンテンツネゴシエーションの循環を解消する.
507 Insufficient Storage
- 説明: サーバーに十分な空き容量がない.
- 対処例: サーバーのストレージ容量を増やすか,不要なデータを削除する.
508 Loop Detected
- 説明: 無限ループを検出した.
- 対処例: サーバーの設定や処理ロジックを見直し,ループを解消する.
510 Not Extended
- 説明: サーバーへの拡張が必要である.
- 対処例: 必要な拡張をサーバーに実装する.
511 Network Authentication Required
- 説明: ネットワークアクセスに認証が必要である.
- 対処例: ネットワークの認証ページにアクセスし,必要な認証を行う.