hero-rinのブログ

某会社で某システムの運用、開発をやっているただのおじさん

HTTPとHTTPステータスコードのお話

HTTPとHTTPステータスコード

前回、リダイレクトとHTTPステータスコードの話を書かせて貰いましたが、改めてHTTPとHTTPステータスコードとは、という内容も残して行うと思います。

HTTP

Hypertextとは、"テキストを超えた文章"らしいです。今更なんですが、なんじゃそりゃ(^^;という感じなのでもうちょっと具体的な例を上げると、リンクや画像表示・映像などを結び付ける。ただ文章を表示するだけじゃなく別の所にある"何か"を文章内に表示(結び付ける)ことができるものはHypertextらしいです。そして"相互に結び付ける"には通信(転送)する必要があり、その通信にはお約束ごとが必要になるんですがそのお約束ごとがHTTPというルールになります。

  • HTTP(Hypertext Transfer Protocol)
  • Hypertext
    • 複数の文章や画像・映像などを相互に結び付けるテキストの仕組み
  • Protocol
    • 手順、規約、お約束ごと、ルール

HTTPステータスコード

ハイパテキスト転送のルールに沿っているか?沿っていないか?の状態をお知らせしてくれる値です。前回のリダイレクトの時にも書いたように3桁の数字でその時の状態をお知らせしてくれます。

  • ステータス (status)
    • 動作状態。その時の状態をお知らせしてくれる値ですね。
  • コード (code)
HTTPステータスコードの分類

このステータスコードにはもちろんなんですが、ちゃんとルールがあって大分類として3桁数字の先頭数字が1〜5で分類されています。具体的にはこんな感じです。

1xxは継続して処理させる時に返すステータスコードなので自分的にはあまり見かけない印象です。それ以外はプログラムに詳しくない方でもホームページ上に表示されちゃっている(よろしくない!)のをたまに見かけることがあったりするんじゃないでしょか?

大分類の中にそれぞれ具体的なルールとそれに対応する3桁数字が割り振られているので、抜粋になってしまうんですが、それぞれの詳細情報を下に載せて行こうと思います。

1xx Informational 情報

リクエストは受け取られた。処理は継続される。

何かしら送信して貰った時に、受けてが『処理中なのでちょっと待って!』という時や『こっちにして!』という時に返すステータスコードです。

コード 用語 内容
100 Continue 継続。クライアントはリクエストを継続できる。サーバがリクエストの最初の部分を受け取り、まだ拒否していないことを示す
101 Switching Protocols サーバがリクエストに対してプロトコルの切替えを要求している
102 Processing リクエストは受理されたが、処理は完了していない(処理中である)

2xx Success 成功

リクエストは受け取られ、理解され、受理された。

何かしら送信して貰った時に、それが成功した『ちゃんと表示された!』『ちゃんと処理された』時に返すステータスコードです。

コード 用語 内容
200 OK リクエストは成功
201 Created リクエストが完了し、新たに作成されたデータのURIが返される
202 Accepted リクエストは受理されたが、処理は完了していない

3xx Redirection リダイレクション

リクエストを完了させるために、追加的な処理が必要。

自分的な解釈になってしまいますが、"あっち"から"こっち"に移動する時のステータスコードだと思ってます。

コード 用語 内容
301 Moved Permanently リクエストしたリソースが恒久的に移動されている時に返される
302 Found リクエストしたリソースが一時的に移動されている時に返される
307 Temporary Redirect リクエストしたリソースは一時的に移動されている時に返される*1
308 Permanent Redirect リクエストしたリソースは恒久的に移動されている時に返される*2

4xx Client Error クライアントエラー

クライアントからのリクエストに誤りがあった。

クライアントとはこっち側。即ち自分が送っている情報が間違っている場合に返ってくるステータスコードです。(ありえないURIとか指定すると403とか404とかブラウザ上で見れちゃうページが結構あるので、これが一番分かりやすいかも)

コード 用語 内容
400 Bad Request クライアントのリクエストがおかしい場合に返される
403 Forbidden リソースにアクセスすることを拒否された*3
404 Not Found リソースが見つからなかった*4
405 Method Not Allowed POSTが許可されていない場所でPOSTすると返される

5xx Server Error サーバエラー

サーバがリクエストの処理に失敗した。

サーバとありますが、アプリケーションサーバがアプリケーションの処理を解釈できずに失敗として返すと書いた方が理解しやすいですかね。どんなWebサービスでもいいんですが(ECでもブログでもSNSでも)表示させるためにhttpサーバがあり、処理する(書き込んだ物を登録して表示させたりなど)ためにappサーバがあります。5xxは、処理が失敗した時に返ってくるステータスコードです。

コード 用語 内容
500 Internal Server Error サーバ内部(アプリケーション)にエラーが発生した場合に返される
502 Bad Gateway ゲートウェイ・プロキシサーバが拒否した場合に返される
503 Service Unavailable アクセスが殺到して処理不能に陥った場合に返される
504 Gateway Timeout ゲートウェイ・プロキシサーバが相手サーバからのレスポンスがなかった場合に返される
505 HTTP Version Not Supported リクエストがサポートされていないHTTPバージョンである場合に返される

どんなものがあるか何となく感じとって貰えたでしょうか?上に書かせて貰ったのは本当に一部なので詳しくはWikiをご確認ください。

ja.wikipedia.org

書いてみて改めて思うこと

正直、基礎の基礎なんですが改めて確認してみると分かっていない部分が結構あり自分がいかに中途半端な情報でここら辺のコードを扱って来たかが分かった気がします。実はRestAPIを自前で作成する時のレスポンスコードなどを考える時に重要になってくるので、『こんなの』とは思わず皆さんも今一度見返してみて貰えたらと思います。(おろそかにしてたの、自分だけかも (。>﹏<。) )

ということで今回はこの辺で!

*1:302の規格外な使用法が横行したため、302の本来の使用法を改めて定義したもの

*2:301の規格外な使用法が横行したため、301の本来の使用法を改めて定義したもの

*3:ページはあるけど拒否された

*4:サーバ上のアクセス権がない場合にも使用される