HTTPとは
HTTPとはパソコンやスマートフォンからwebを閲覧する際に利用される通信手段(通信プロトコル)。
通信プロトコルとはネットワーク上で通信するための手順や規約のこと
通信プロトコルとは 「プロトコル, ネットワークプロトコル, 通信規約」 (protocol): - IT用語辞典バイナリ
HTTPはOSI参照モデルの第7層にあたる通信機能。以下wikipediaより
- 国際標準化機構(ISO)によって策定された、コンピュータの持つべき通信機能を階層構造に分割したモデルである。OSI基本参照モデル、OSIモデルなどとも呼ばれ、通信機能(通信プロトコル)を7つの階層に分けて定義している。
- 第7層 - アプリケーション層
- 具体的な通信サービス(例えばファイル・メールの転送、遠隔データベースアクセスなど)を提供。HTTPやFTP等の通信サービス。
- 第6層 - プレゼンテーション層
- データの表現方法(例えばEBCDICコードのテキストファイルをASCIIコードのファイルへ変換する)。
- 第5層 - セッション層
- 通信プログラム間の通信の開始から終了までの手順(接続が途切れた場合、接続の回復を試みる)。
- 第4層 - トランスポート層
- ネットワークの端から端までの通信管理(エラー訂正、再送制御等)。
- 第3層 - ネットワーク層
- ネットワークにおける通信経路の選択(ルーティング)。データ中継。
- 第2層 - データリンク層
- 直接的(隣接的)に接続されている通信機器間の信号の受け渡し。
- 第1層 - 物理層
- 物理的な接続。コネクタのピンの数、コネクタ形状の規定等。銅線-光ファイバ間の電気信号の変換等。
引用元:Webサイト高速化に必要なHTTPの仕組みを理解する (1/4):CodeZine
HTTPリクエストが送信されると電気信号まで分解され、サーバーが応答した後電気信号がHTTPのリクエストを理解して必要なデータを返すという感じでしょうか。
HTTPと関連して動くもう一つのプロトコルがトランスファープロトコルと呼ばれ、主にTCPとUDPというパケット型の通信。
パケットとは
データ通信ネットワークを流れるデータの単位で、伝送されるデータ本体に送信先の所在データなど制御情報を付加した小さなまとまりのこと。第三層のネットワーク層にあたるTCP/IPモデルが扱うデータの単位がパケットと呼ばれる。
TCP:通信の信頼性を保証する代わり、速度が遅い。webサイトやアプリケーションに使われる。
UDP:信頼性を保証せず、短時間で多くの通信を行う。主にストリーミング配信に使われる。
さて本題
HTTPは基本的に1つのリクエストに対して、1つのレスポンスを返す。
そのやり取りされるデータの中身は大きく3つの情報で構成されている。
1. リクエスト/レスポンス:どのようにデータを取得するかの要求内容とそれに対する返答
2. ヘッダー:通信相手にクライアント・サーバーに関する自身の状態や要求を示すためのメタデータ
3.通信相手に提供する実際のコンテンツ
1のリクエストでは3つの情報が渡される。
GET /index.html HTTP/1.1
GET--->> メソッド
/index.html -->> URI
HTTP/1.1 --->>プロトコル
主要なHTTP/1.1メソッド
GET: webを閲覧するときに情報を要求するときに使われるメソッド
POST: サーバー側に情報を送り、変更を加えたいときに使うメソッド
HEAD: ボディのないヘッダのみを要求するメソッド
1のレスポンスでも3つの情報が返ってくる
HTTP/1.1 200 OK
HTTP/1.1 -->> プロトコル
200 -->> ステータスコード
OK -->> メッセージ
コード | ステータス |
---|---|
200 | リクエストが成功し、要求したドキュメントが返ってきたとき。 |
304 | ドキュメントが更新されていれば新しいドキュメントを返すようリクエストしたが、 更新されていない場合に返ってくるステータスコード。 |
403 | アクセス権がないときなど、実行を拒否したとき。 |
404 | 要求したURIに一致するリソースが見つからなかったとき。 |
500 | サーバー内でのエラーにより処理できないとき。 |
503 | サーバーの過負荷かメンテナンスで処理できないとき。 |
引用元:Webサイト高速化に必要なHTTPの仕組みを理解する (2/4):CodeZine
404は結構見ますね。。
ちなみに
また、ステータスコードはエラーの状態を確認するだけではなく、ファイルのキャッシュ状態を確認する場合にも利用できます。
確認方法は別の回で紹介しますが、簡単に説明すると「200」か「304」かでファイルをサーバーからロードしているのか、ローカルキャッシュを利用しているのか判断することができます。
304はキャッシュされているデータということでしょうか。
2のヘッダー情報を以下のようです。
項目名 | リクエスト/レスポンス | 説明 |
---|---|---|
Accept | リクエスト | 受信可能なデータ形式をサーバーに通知します。 |
Cache-Control | リクエスト/レスポンス | キャッシュに関する指示をサーバーに通知します。 |
Connection | リクエスト/レスポンス | 接続的接続(Keep-Alive)のサポート状態を サーバーに通知します。 |
Accept-Encoding | リクエスト | ブラウザが受信可能なエンコード方式(gzip)を サーバーに通知します。 |
Content-Encoding | リクエスト/レスポンス | コンテンツのエンコード方式(gzip)を サーバーに通知します。 |
Content-Type | リクエスト/レスポンス | MIMEタイプを通知します。 |
Date | リクエスト/レスポンス | 応答を返す時刻を通知します。 |
Expires | リクエスト/レスポンス | ロードしたコンポーネント(画像やCSS,JavaScriptなど)の キャッシュ期限を通知します。 |
Host | リクエスト | HTTP1.1で必須とされている項目です。 サーバーに対して要求しているホスト名を通知します。 |
If-Modified-Since | リクエスト | クライアント側にキャッシュがある場合、 新しいものがあれば転送するようサーバー側に要求します。 新しいものがなければ304のステータスコードを返し、 引き続きクライアント側のキャッシュを利用します。 |
Etags | レスポンス | キャッシュされているコンポーネントが、 Webサーバー上のオリジナルと一致しているか検証します。 |
Last-Modified | リクエスト/レスポンス | コンポーネントが最後に更新された時刻を通知します。 |
Referer | リクエスト | 要求元になったページのURLをサーバー側に通知します。 |
User-Agent | リクエスト | ブラウザのユーザーエージェントをサーバーに通知します。 |
Warning | リクエスト/レスポンス |
ワーニングとメッセージを通知します。 |
HTMLのリクエストヘッダー
Host: dev.classmethod.jp
Connection: keep-alive
Cache-Control: max-age=0
If-Modified-Since: Sun, 13 Jan 2013 15:49:45 GMT
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17
Accept: */*
Referer: http://dev.classmethod.jp/web_acceleration_sample/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Accept-Charset: UTF-8,*;q=0.5
Cookie: logged_in=yes
レスポンスヘッダー
Server: dev.classmethod.jp
Date: Thu, 17 Jan 2013 12:37:45 GMT
Content-Type: image/png
Content-Length: 1312
Last-Modified: Sun, 13 Jan 2013 15:49:45 GMT
Connection: keep-alive
Expires: Fri, 18 Jan 2013 12:37:45 GMT
Cache-Control: max-age=86400
Accept-Ranges: none
引用ばっかですいません
HTTPボディは
リクエストの場合は主にPOSTメソッドなどでデータの送信に利用し、レスポンスの際はHTMLなどが入ります。
以下時間あるときに読みたい。RESTについて気がむいたら書きます。
身につけておきたいWebサイト高速化テクニック #2|検証ツールとそもそもHTTPって何だ編 | Developers.IO
Riding Rails: Edge Rails: PATCH is the new primary HTTP method for updates