HTTPレスポンスステータスコードを理解しよう
Web アプリケーションは、クライアントとサーバーのやりとりによって実現されています。 クライアントからサーバーに対する通信をリクエスト、サーバーからクライアントに対する通信をレスポンスと呼びます。
このレクチャーでは、レスポンスとは何か、またレスポンスに含まれるレスポンスステータスコードの種類とその意味を解説します。 エラーコードを見ると、エラーの原因がサーバー側にあるのか、クライアント側にあるのかを判断できます。
目次
レスポンスとは
レスポンスは、クライアントからのリクエストに対するサーバーの返答です。
例えば、ウェブページを開く際、クライアントであるブラウザはサーバーにページのデータをリクエストをします。 サーバーはそれに対してデータを返します。 これがレスポンスです。
レスポンスステータスコードとはなにか
レスポンスには、レスポンスステータスコードが含まれています。 ステータスコードは3桁の数字です。 これを読むことで、以下のようなことを理解できます:
- リクエストは成功したか/失敗したか
- 失敗した場合、クライアントとサーバーのどちらに原因があるのか
- 失敗した場合、なにが原因か
代表的なステータスコード
レスポンスステータスコードのうち、代表的なものを見ていきましょう。
200系(成功)
「200 OK」は、リクエストが正常に完了したことを示すコードです。 このステータスコードが返されると、クライアントは要求した操作が成功したと解釈します。
300系(リダイレクト)
「301 Moved Permanently」は、リクエストされたリソースが恒久的に移動したことを示します。 新しいURLにリダイレクトする情報が含まれています。
400系(クライアントエラー)
400番台のステータスコードはクライアントのエラーを表します。 このコードは、サーバーに問題はなく、クライント側のリクエストに問題があるケースを表します。
例えば、「404 Not Found」は、リクエストしたリソースが見つからない場合に返されるコードです。 URLの入力ミスや、リンク切れなどが考えられます。
500系(サーバーエラー)
500番台のステータスコードはサーバー側のエラーを表します。 このエラーが発生した場合は、サーバー側に不具合があるので原因調査と修正が必要です。
「500 Internal Server Error」は、サーバー内部にエラーが発生した場合に返されます。 これには、サーバーの設定ミスや、アプリケーションのバグなどが含まれていることを表します。
500系と400系エラーの使い分け
400 系エラーと 500 系エラーの使い分けは重要です。
- 400 系エラーは「クライアント側の不備」です
- 500 系エラーは「サーバー側の不備」です
現実のアプリケーションでは、本番稼働が始まるとエラーが発生していないかを24時間365日監視し続けます。 もし、500系エラーが発生した場合は即時対応が基本です。 夜中でも電話で起こされて即時調査が開始されるのが普通です。 本来 400 系エラーとするべきところを 500 系エラーにしてしまい、夜中に起こされることがないようにしましょう
対して400系エラーは、原則、即時対応は不要です。 クライアントに原因があるため、サーバー側で修正することは基本的にはないはずだからです。 (ただし、あるタイミングから 400 系エラーが頻発するよう事象を観測した場合は、サーバー側の不具合の可能性があるので調査をすることはあります)
まとめ:400系エラーと500系エラーの違いに気をつけよう
ウェブアプリケーションの開発と運用において、レスポンスステータスコードの理解は欠かせません。
- ステータスコードは、リクエストが成功したか、クライアント側に問題があるのか、それともサーバー側に問題があるのかを示しています
- 400系エラーはクライアント側の問題を、500系エラーはサーバー側の問題を示しており、それぞれのエラーに適切に対応する必要があります
代表的なステータスコードの意味を理解することで、エラーの診断と解決がスムーズに行えます。 正常系だけでなくエラーが発生した際の挙動にも注意を払ってアプリケーションを実装していきましょう。