社会不適合破壊的お味噌マン

くまのプーさんのような大人になりたいです!

HTTPとは

HTTPとはパソコンやスマートフォンからwebを閲覧する際に利用される通信手段(通信プロトコル)。

通信プロトコルとはネットワーク上で通信するための手順や規約のこと

通信プロトコルとは 「プロトコル, ネットワークプロトコル, 通信規約」 (protocol): - IT用語辞典バイナリ

 

HTTPはOSI参照モデル第7層にあたる通信機能。以下wikipediaより

国際標準化機構(ISO)によって策定された、コンピュータの持つべき通信機能を階層構造に分割したモデルである。OSI基本参照モデルOSIモデルなどとも呼ばれ、通信機能(通信プロトコル)を7つの階層に分けて定義している。
第7層 - アプリケーション層
具体的な通信サービス(例えばファイル・メールの転送、遠隔データベースアクセスなど)を提供。HTTPやFTP等の通信サービス。
第6層 - プレゼンテーション層
データの表現方法(例えばEBCDICコードのテキストファイルをASCIIコードのファイルへ変換する)。
第5層 - セッション層
通信プログラム間の通信の開始から終了までの手順(接続が途切れた場合、接続の回復を試みる)。
第4層 - トランスポート層
ネットワークの端から端までの通信管理(エラー訂正、再送制御等)。
第3層 - ネットワーク層
ネットワークにおける通信経路の選択(ルーティング)。データ中継。
第2層 - データリンク層
直接的(隣接的)に接続されている通信機器間の信号の受け渡し。
第1層 - 物理層
物理的な接続。コネクタのピンの数、コネクタ形状の規定等。銅線-光ファイバ間の電気信号の変換等。

 

http://codezine.jp/static/images/article/7065/7065_01a_s.gif

 

引用元:Webサイト高速化に必要なHTTPの仕組みを理解する (1/4):CodeZine

 

HTTPリクエストが送信されると電気信号まで分解され、サーバーが応答した後電気信号がHTTPのリクエストを理解して必要なデータを返すという感じでしょうか。

 

HTTPと関連して動くもう一つのプロトコルがトランスファープロトコルと呼ばれ、主にTCPUDPというパケット型の通信。

パケットとは

データ通信ネットワークを流れるデータの単位で、伝送されるデータ本体に送信先の所在データなど制御情報を付加した小さなまとまりのこと。第三層のネットワーク層にあたるTCP/IPモデルが扱うデータの単位がパケットと呼ばれる。

 TCPUDPの違いは

TCP:通信の信頼性を保証する代わり、速度が遅い。webサイトやアプリケーションに使われる。

UDP:信頼性を保証せず、短時間で多くの通信を行う。主にストリーミング配信に使われる。

さて本題

HTTPは基本的に1つのリクエストに対して、1つのレスポンスを返す。

そのやり取りされるデータの中身は大きく3つの情報で構成されている。

1. リクエスト/レスポンス:どのようにデータを取得するかの要求内容とそれに対する返答

2. ヘッダー:通信相手にクライアント・サーバーに関する自身の状態や要求を示すためのメタデータ

3.通信相手に提供する実際のコンテンツ

 

1のリクエストでは3つの情報が渡される。

メソッドURIプロトコル

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について気がむいたら書きます。

HTTPセッションとTCP接続

身につけておきたいWebサイト高速化テクニック #2|検証ツールとそもそもHTTPって何だ編 | Developers.IO

Riding Rails: Edge Rails: PATCH is the new primary HTTP method for updates