先日はインターネットの大まかな全体像を見てきました。
今回はアプリケーション層に属している『HTTPプロトコル』について解説します。
HTTPプロトコルの活躍例
HTTPプロトコルが使われている身近な例は、今皆さんがご覧になっているウェブブラウザがあります。
ウェブブラウザはサーバーにあるソースをクライアントのブラウザが解釈して描画しています。
このクライアントとサーバーの通信の仕組みを規定したものがHTTPプロトコルになります。
HTTPプロトコルの機能
ウェブサイトを表示するときにまず何が必要なのか考えてみましょう。
最もコアな機能
最も重要な機能として、
「ウェブサイトのデータ」
をサーバーからクライアント側へと伝達しなければなりません。
それを実現するためにはクライアント側からサイトのデータをくださいとサーバに要請する必要があります。
つまり、HTTPプロトコルでは、リクエストとレスポンスという2つの通信が最低限必要になります。
HTTPプロトコルであることの明示
クライアントから、「データをください!」とサーバー側に要請するわけですが、サーバー側に届く時にはバイナリという意味不明な文字の羅列になって届きます。
そこで、「データをください!」という要請にHTTPプロトコルでの通信ですよというパターンを枕詞のように置いておきます。
これをリクエストの最初の行に持ってきます。HTTP/1.1の通信では
GET /index.html HTTP/1.1
のように記述します。
HTTPプロトコルにおいて、リクエストの一行目にはMethod:通信の種類(リクエスト?レスポンス?)、Path:リソースのパス、Version of the protocol:プロトコルのバージョンを明記する必要があります。
データを用意するための情報
リクエストを受け取ったサーバーはせっせと要請をもとにデータを用意するわけですが、どういうフォーマットで見るのか、どのブラウザで見れるデータにすればよいのかがわかりません。
そこでリクエストをするときにそれらの情報も記載して送ります。
この「データを用意する際に必要な前情報」をHeaderと呼びます。
通信がうまくいったかどうかの明示
レスポンスでは、サイトのデータだけを送ればいいわけではなく、
通信が失敗した時のために、通信が成功したのか、失敗したのか
失敗したのであればなぜ失敗したのかをクライアントに渡してあげなければなりません。
レスポンスではこれらの情報をHeaderに格納し、それ以降にサイトのデータをくっつけてクライアントに送信しています。
最近ではHTTP/2の実装が続々と進んできて、通信規格も高速で大容量な通信が可能になってきています。
このあたりのプロトコルの知識があると、サーバーとの通信の全体像が見えやすいのではないでしょうか?