皆さま、お疲れ様です!
この記事を開いていただいてありがとうございます!
今回の内容は【ステータスコードの極意】です!
この記事の内容
この記事ではステータスコードを詳しく調べて記事にしたものです。
普段普通に使っているけど意外とどういったものか知らなこともあるのでぜひ読んでいってください!
Contents
ステータスコードとは
WebアプリケーションやAPIを開発する際に、HTTPステータスコードはクライアントとサーバー間の通信の結果を理解する上で非常に重要です。ステータスコードは、サーバーがクライアントのリクエストをどう処理したかを表す数値で、リクエストの成功や失敗、リダイレクト、エラーの原因を示すために使用されます。
HTTPステータスコードの概要
まずは、HTTPステータスコードの基本的な概念を説明します。ステータスコードは、クライアントがサーバーに対して行ったリクエストに対して、サーバーが返す3桁の数値です。この数値を見れば、リクエストが成功したのか、エラーが発生したのか、リダイレクトが必要なのかがわかります。
ステータスコードは、ブラウザ、APIクライアント、モバイルアプリケーションなどのあらゆるインターネット通信において使われており、リクエストとレスポンスの結果を確認するための標準的な方法です。
ステータスコードの役割
この章では、ステータスコードが果たす役割について詳しく説明します。
ステータスコードは、通信プロトコルであるHTTPの重要な要素で、クライアント(たとえば、Webブラウザやモバイルアプリ)が送信したリクエストがどのように処理されたかをサーバーが伝える手段です。ステータスコードは、サーバーの応答を正しく理解し、次のアクションを決定するためにクライアントが使用します。
また、デバッグや問題解決にも非常に有用です。サーバーでエラーが発生した場合、500番台のエラーコードが返され、どの部分に問題があったのかが一目でわかります。
ステータスコードの分類
HTTPステータスコードは、3桁の数字で表され、100から599までの範囲があります。ステータスコードは以下の5つのカテゴリに分類されます。
- 1xx: 情報レスポンス
- 2xx: 成功
- 3xx: リダイレクション
- 4xx: クライアントエラー
- 5xx: サーバーエラー
この分類によって、どのような種類のレスポンスが返されているのかが簡単に理解できます。それでは、各カテゴリについて詳しく見ていきましょう。
よく使うステータスコード一覧
色々みていく前に、まずはよく使用するステータスコードを先にまとめておきます!
200 OK: 最も一般的な成功コード。リクエストが成功し、期待されたレスポンスが返されたことを示します。GETやPOSTリクエストに使用されます。
201 Created: リクエストが成功し、新しいリソースが作成された場合に使用されます。POSTリクエストでデータが新しく作成された際に返されます。
204 No Content: リクエストが成功しましたが、返す内容がない場合に使用されます。DELETEリクエストや、レスポンスボディを必要としない場合に使用されます。
301 Moved Permanently: リクエストされたリソースが恒久的に新しいURIに移動したことを示します。SEOやURL変更時に使われます。
302 Found: リソースが一時的に異なる場所にあることを示します。元のURIが将来再度使われる可能性があります。
304 Not Modified: リクエストされたリソースが変更されていないことを示します。クライアントはキャッシュされたリソースを使って再利用できます。
400 Bad Request: クライアントのリクエストが不正であることを示します。リクエストの形式が正しくない場合に使用されます。
401 Unauthorized: 認証が必要であるが、認証情報が提供されていない、または無効である場合に返されます。セキュリティ保護されたリソースにアクセスしようとした場合に使用されます。
403 Forbidden: クライアントは認証されているものの、リソースへのアクセス権がない場合に返されます。
404 Not Found: リクエストされたリソースが見つからない場合に使用されます。存在しないURLにアクセスしたときによく使用されます。
429 Too Many Requests: クライアントが短時間に過剰なリクエストを送信した場合に使用されます。APIレート制限などでよく使われます。
500 Internal Server Error: サーバー内部で予期しないエラーが発生した場合に返されます。具体的な問題が特定されない一般的なエラーレスポンスです。
502 Bad Gateway: サーバーがゲートウェイやプロキシとして動作し、上流サーバーから不正なレスポンスを受け取った場合に使用されます。
503 Service Unavailable: サーバーが過負荷やメンテナンス中でリクエストを処理できない場合に使用されます。時間を置いて再試行する必要があります。
504 Gateway Timeout: ゲートウェイやプロキシサーバーが上流サーバーからのレスポンスを受け取るまでにタイムアウトが発生した場合に返されます。
1xx: 情報レスポンス
1xxのステータスコードは、クライアントからのリクエストがサーバーに届き、その処理が進行中であることを知らせる情報レスポンスです。通常、クライアントは処理が完了するまで待機し、次のアクションを取ります。
100 Continue
このコードは、クライアントがリクエストのヘッダー部分を送信した後に、リクエストボディの送信を続行して良いことを示します。主に、クライアントが大きなデータを送信する際に使用されます。クライアントはサーバーからの確認を待ってから残りのデータを送信します。
101 Switching Protocols
クライアントがプロトコルの変更を要求し、サーバーがその変更を承認した場合に返されます。例えば、HTTPからWebSocketへのプロトコル切り替えが行われる場合に使用されます。
102 Processing (WebDAV)
サーバーがリクエストを処理中であり、まだ完了していないことを示します。WebDAV拡張で主に使用され、処理が長時間かかる場合にクライアントに進行中の状態を通知します。
103 Early Hints
このステータスコードは、クライアントが本格的なレスポンスを待つ間に、リソースのプリロードを開始できるように、リンクヘッダーを返すために使用されます。
2xx: 成功
2xxのステータスコードは、クライアントのリクエストが正常に処理されたことを示します。これはリクエストの成功を意味し、一般的にレスポンスにはリソースが含まれます。
200 OK
最も一般的な成功ステータスコードです。リクエストが成功し、リクエストされたリソースがレスポンスに含まれる場合に返されます。GETリクエストに対するレスポンスでは、リソースの内容が返され、POSTリクエストに対してはリクエストの結果が返されます。
201 Created
リクエストが成功し、新しいリソースが作成された場合に返されます。例えば、POSTリクエストで新しいデータがデータベースに追加された場合、このステータスコードが返されます。Location
ヘッダーに新しいリソースのURIが含まれることがあります。
202 Accepted
リクエストが受理されたが、まだ処理が完了していないことを示します。非同期のプロセスが使用される場合に使われます。たとえば、長時間かかるバッチ処理などがこのケースに当たります。
204 No Content
リクエストは成功しましたが、レスポンスにはコンテンツが含まれていません。主にDELETEリクエストに使用され、クライアントに追加の情報を返す必要がない場合に使われます。
206 Partial Content
リクエストが部分的に成功したことを示します。範囲指定リクエスト(例えば、ファイルの一部をダウンロードする場合)に使用され、レスポンスにはリクエストされた範囲のデータが含まれます。
3xx: リダイレクション
3xxのステータスコードは、リクエストされたリソースが別の場所にあるか、リクエストを完了するためにクライアントが追加のアクションを実行する必要があることを示します。
301 Moved Permanently
リクエストされたリソースが恒久的に別のURIに移動したことを示します。今後は、クライアントは新しいURIを使用してリクエストを送信するべきです。SEOやURL構造の変更などでよく使用されます。
302 Found
リソースが一時的に別のURIに移動している場合に使用されます。将来的には元のURIにリソースが戻る可能性があるため、クライアントは元のURIを記憶し続けるべきです。
304 Not Modified
リクエストされたリソースは前回アクセスして以来変更されていないことを示します。クライアントはキャッシュされたリソースを使用して良いという意味です。リソースの効率的な管理に役立ちます。
4xx: クライアントエラー
4xxのステータスコードは、クライアントのリクエストに問題があることを示します。クライアントが修正可能なエラーであり、リクエストを再試行する際に問題を解決する必要があります。
400 Bad Request
クライアントのリクエストが不正であり、サーバーが処理できない場合に返されます。これは、リクエストに欠陥がある場合(例: 不正な形式のJSONデータ)に使われます。
認証が必要ですが、認証情報が提供されていない、または無効である場合に返されます。通常、OAuthやBasic認証が失敗した際に返され、クライアントは有効な認証情報を送信する必要があります。
403 Forbidden
クライアントのリクエストは認証されていますが、リソースへのアクセスが禁止されている場合に返されます。権限不足や特定のリソースへのアクセスが制限されている場合に使用されます。
404 Not Found
リクエストされたリソースがサーバー上に存在しない場合に返されます。クライアントが誤ったURLを指定した場合や、リソースが削除された場合に使われます。
429 Too Many Requests
クライアントが一定期間内に過剰なリクエストを行った場合に返されます。APIの使用制限やDoS攻撃の対策として使われ、クライアントは一定時間待機する必要があります。
5xx: サーバーエラー
5xxのステータスコードは、サーバー側で問題が発生し、リクエストを正常に処理できなかった場合に返されます。
500 Internal Server Error
サーバー内部で予期しないエラーが発生した場合に返される一般的なエラーレスポンスです。具体的な問題がサーバー内で発生しており、サーバー側のデバッグが必要です。
502 Bad Gateway
サーバーがゲートウェイやプロキシとして動作しており、上流サーバーから不正なレスポンスを受け取った場合に返されます。ネットワーク経由で複数のサーバーが連携する際に発生することがあります。
サーバーが過負荷状態またはメンテナンス中でリクエストを処理できない場合に返されます。通常は一時的な問題であり、時間を置いて再試行することが推奨されます。
ステータスコードの活用方法
ステータスコードを正しく使うことで、WebアプリケーションやAPIの信頼性やユーザビリティを向上させることができます。例えば、適切なステータスコードを返すことで、クライアントがエラーの原因を簡単に特定し、適切な対処を行えるようになります。
ロギングとモニタリング
500番台のエラーが発生した場合は、サーバー側でエラーの詳細をログに記録し、モニタリングツールを使用して速やかに問題を検知することが重要です。
クライアント側のリトライ
503や429のエラーが発生した場合、クライアント側で一定の待機時間を置いてからリクエストを再試行することができます。これにより、リクエストの成功率を高めることができます。
まとめ
HTTPステータスコードは、Web通信におけるクライアントとサーバーのやり取りを理解し、問題の特定と解決に役立ちます。それぞれのコードの意味を正しく理解し、適切に使用することで、開発したアプリケーションの品質を向上させることが可能です。
特に、4xxや5xxエラーを適切に処理することで、ユーザーにとってより良いエクスペリエンスを提供し、エラー時の対応がスムーズに行えるようになります。