インソースマーケティングデザイン
2016.03.22 システム
知っておきたいHTTPステータスコードまとめ
こんにちは。エンジニアの高田です。
先日のホワイトデーには可愛らしい男の子たちが娘のところにバレンタインのお返しを届けてくれました。
これまた先日「サポート対象外のブラウザからアクセスされたらエラーにして、404とか503とか適切なHTTPステータスコードで返しといて!」と依頼されました。
適切な…HTTPステータスコード……
普段はシステムでエラーとなったら、とりあえず400か、500のHTTPステータスコードを返しちゃってます。
てきせつな…HTTPステータスコード……
さて私はどんなHTTPステータスコードをお返ししたでしょうか?!
ということで今回は「HTTPステータスコード」についてご紹介します。
私がHTTPステータスコードで知っているものといえば通常の「200 OK」。
よく見かけるのがページがないときの「404 Not Found」。
とりあえずエラーの「400 Bad Request」「500 Internal Server Error」。
あとは「301 リダイレクト」くらいです。
十分じゃないかと思いましたが。。。依頼に対する適切なHTTPステータスコードはこの中にはなさそうなので、もう少し詳しく調べご紹介します。
目次
HTTPステータスコードとは?
得意のウィキペディアよりいきなり引用~
HTTPステータスコードは、HTTPにおいてWebサーバからのレスポンスの意味を表現する3桁の数字からなるコードで、RFC 2616、RFC 7231等によって定められている。
私たちがWEBサイトを見るときブラウザにURLを入れて、このページが見たいよ!とWEBサーバーにアクセスします。これがリクエストです。
WEBサーバーはリクエストを受け取ると、URLに一致するページをプラウザに返します。これがレスポンスです。
このレスポンスの中にHTTPステータスコードが含まれており、このコードに基づいてブラウザに結果が表示されます。
ページが正しく表示されている状態は、HTTPステータスコードは「200」となります。
HTTPステータスコードは100番台~500番台まで存在し、それぞれに意味を持っています。
その意味をブラウザに伝えるためのコードがHTTPステータスコードなのです。
ざっくりと100番台~500番台毎に意味がグループ化されています。
- 100番台リクエスト情報処理中Informational
- 200番台リクエスト処理成功 Success
- 300番台リダイレクト処理 Redirection
- 400番台クライアントエラー Client Error
- 500番台サーバーエラー Server Error
このざっくりは覚えておいたほうが良さそうですね。
100番台はなかなかお目にかかることがないので、今回は200番台~500番台の中で覚えておいたほうがいいかなというものだけご紹介します。
ちなみにHTTPステータスコードの確認方法ですが、今のブラウザは開発ツールが大抵ついているので、それで確認できます。
Chromeの場合、F12キーを押すと開発ツールが表示されます。(メニュー→その他のツール→デベロッパーツール)
開発ツールの「Network」タブを表示した状態でWEBページを表示させます。
↓するとこんな感じで確認できます。
2xx Success 成功
リクエストは受け取られ、理解され、受理されたという意味になります。
「200 OK」
リクエストは成功し、レスポンスとともに要求に応じた情報が返されます。
ブラウザでページが正しく表示された場合は、ほとんどがこのステータスコードを返しています。
安心できる数字ですね。
3xx Redirection リダイレクション
リクエストを完了させるために、追加的な処理が必要です。
「301 Moved Permanently」
リクエストしたリソースが恒久的に移動されているときに返されます。
サイトを移転したときやドメインを変更したときに使用します。
旧サイト(ドメイン)のほうに「301リダイレクト」の対処をして、新しいサイト(ドメイン)へ飛ばしてあげます。
これをしておくと旧サイト(ドメイン)ほうでの検索エンジンの評価を新しいサイト(ドメイン)でも引き継ぐことができるそうです。
↓こちらの記事がとても参考になります。
「サイトリニューアル時の301リダイレクト、.htaccess記述方法いろいろ」
「302 Found」
リクエストしたリソースが一時的に移動されているときに返されます。
「301」と違い、その移動が一時的であること、検索エンジンの評価は引き継がれないということです。
元々はMoved Temporarily(一時的に移動した)で、本来はリクエストしたリソースが一時的にそのURLに存在せず、別のURLにある場合に使用するステータスコードでした。
しかし、例えば掲示板やWikiなどで投稿後にブラウザを他のURLに転送したいときにもこのコードが使用されるようになったため、302はFoundになり、新たに303,307が作成されました。
4xx Client Error クライアントエラー
クライアントからのリクエストに誤りがあったという意味になります。
この400番台が一番多く、20以上の種類があります。
「400 Bad Request」
定義されていないメソッドを使うなど、クライアントのリクエストがおかしい場合に返されます。
Basic認証やDigest認証などを行うときに使用されます。
認証ダイアログが表示された時、キャンセルボタンを押したりID・パスワードが間違っているとよく下のようなエラー画面見ますよね。
「403 Forbidden」
リソースにアクセスすることを拒否された場合に返されます。リクエストはしたが処理できないという意味です。
アクセス権がない場合や、ホストがアクセス禁止処分を受けた場合などに返されます。
「404 Not Found」
アクセスしたページが見つからなかった場合返されます。
一般的に一番よく見かけるコードです。
サイト運営者は分かりやすい404エラーページを用意しておくと良いですよね。
↓ちなみにこれが弊社の404エラーページです。
404エラーページもさまざまな工夫がされているページが色々あるので見比べてみるのも面白いです。
5xx Server Error サーバエラー
サーバがリクエストの処理に失敗したという意味になります。
「500 Internal Server Error」
サーバ内部エラー。サーバ内部にエラーが発生した場合に返されます。
例として、CGIとして動作させているプログラムに文法エラーがあったり、設定に誤りがあった場合などに返されます。
これが出ると開発者はドキドキしますね。
サービスが一時的に過負荷やメンテナンスで使用不可能なときに返されます。
例として、アクセスが殺到して処理不能に陥った場合などに返されます。
サービスが一時的に過負荷になったときは怖いですね。
サイトメンテナンス中のときなども使用するコードです。
↓そのやり方はこの記事が参考になります。
「Webサイトのメンテナンス中画面を出す正しい作法と.htaccessの書き方」
最後に
HTTPステータスコードにはすごく沢山の意味があるんですね。今回紹介したものくらいは覚えておいたほうがいいかもしれません。
ちなみに最初に話したサポート対象外のプラウザからアクセスがあった場合、HTTPステータスコードは「403 Forbidden」を返すことにしました。
クライアント側が原因であること、サポート対象外のブラウザはアクセスを許可することができないということから判断して「403 Forbidden」にしました。
↓こちらのHTTPステータスコードを決定するフローチャート分かりやすいです。
「HTTPステータスコードを適切に選ぶためのフローチャート : 難しく考えるのをやめよう」
システムのエラーもその原因によって本当はHTTPステータスコードを変えるべきなのかもしれませんね。
ではまた。