Web関連の情報を読んでいると「HTTPリクエスト」や「HTTPレスポンス」というキーワードを目にするかと思います。
簡単に説明すると、WebサーバーにHTTPリクエストを送り、データを要求します。
そして、要求に対してHTTPレスポンス(応答)が返ってきます。
単純なこの「要求」と「応答」がHTTPの基本です。
HTTPレスポンスとは?
HTTPレスポンスとは、上で説明したようにHTTPリクエストを送ったことによる応答です。
この応答はデータ(HTMLファイル、画像など)として返ってきます。
もっと細かく言いますと、HTTPレスポンスは「レスポンスヘッダ」と「データ本体(Object-body)」で構成されています。
HTTPレスポンスの例
試しにGoogle.comにHTTPリクエストを送信してみます。
[test@SAKURA_VPS ~]$ curl -k -i https://www.yahoo.co.jp <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”> |
Yahoo!のサイトのレスポンスの速さは「Apache Traffic Server」が原因だった
Yahoo!は巨大なポータルサイトでYahoo!トップページのPV数は1日億単位のアクセスがあると言われています。
また日本国内のインターネットユーザーの8割は「Yahoo! Japan」を利用していると言われています。
https://s.yimg.jp/images/listing/pdfs/serviceguide_all.pdf
なぜこれだけのアクセス数をさばけるのか?
その秘密がHTTPサーバーにありました。
Yahoo! Japan は「Apache Traffic Server」を利用しています。
「Apache Traffic Server」は、オープンソースの HTTP キャッシュプロキシサーバーです。
通常 HTTP サーバー(Webサーバー)と言えば「Apache HTTP Server」が有名ですが、「Apache Traffic Server」とは違います。
ちなみに「Apache Traffic Server」はYahoo!が自社開発をしたキャッシュサーバーでオープンソース化したそうです。
Apache Traffice Server のサイト
Apache Traffic Server はオープンソースなので誰でもダウンロードをして利用することができます。
http://trafficserver.apache.org/
確かに公式サイトを読むと以下の記述がありました。
「Formerly a commercial product, Yahoo! donated it to the Apache Foundation,」
ステータスコード
HTTPリクエスト対してHTTPレスポンスが返ってきますが、その際に「ステータスコード」も一緒に返します。
「ステータスコード」は非常に重要で、プログラムからみてHTTPリクエストが成功したのか失敗したのかが分かるからです。
例えば指定されたデータがない場合や、アクセスが許可されていない場合はエラーが返されます。
- ファイルが見つからない場合 → 404 (Not Found)
- 認証に失敗した場合 → 401 (Unauthorized)
など。
このステータスコードを元にWebアプリケーションが成功したのか失敗しのか、失敗した場合はなぜ失敗したのかが分かります。
ちなみに「HTTP/1.1」では
- 100~
- 200~
- 300~
- 40O~
- 500~
の5種類に分類されています。
カテゴリ | コード | 説明 |
---|---|---|
1xx | Informational | 正常(リクエストは正常に処理されて、処理が続いている状態) |
100 | Continue | |
101 | Switching Protocols | |
2xx | Success | 正常(リクエストは正常に受理された状態) |
200 | OK | |
201 | Created | |
202 | Accepted | |
203 | Non-Authoritative Information | |
204 | No Content | |
205 | Reset Content | |
206 | Partial Content | |
3xx | Redirection | リクエストが完了するために他の処理が必要な状態 |
300 | Multiple Choices | |
301 | Moved Permanently | |
302 | Moved Temporarily | |
303 | See Other | |
304 | Not Modified | |
305 | Use Proxy | |
4xx | Client Error | クライアント側の問題によるエラー(間違ったリクエストなど) |
400 | Bad Request | |
401 | Unauthorized | |
402 | Payment Required | |
403 | Forbidden | |
404 | Not Found | |
405 | Method Not Allowed | |
406 | Not Acceptable | |
407 | Proxy Authentication Required | |
408 | Request Time-out | |
409 | Conflict | |
410 | Gone | |
411 | Length Required | |
412 | Precondition Failed | |
413 | Request Entity Too Large | |
414 | Request-URI Too Large | |
415 | Unsupported Media Type | |
5xx | Server Error | サーバー側の問題によるエラー |
500 | Internal Server Error | |
501 | Not Implemented | |
502 | Bad Gateway | |
503 | Service Unavailable | |
504 | Gateway Time-out | |
505 | HTTP Version not supported |
コメント