HTTP通信

HTTP通信ってよく聞くけどいつもわからなくなる…。
今度こそちゃんと理解したいよ


本記事では、HTTP通信について初心者でもわかりやすく解説します

もうHTTP通信が怖くない!と思えるように理解したい方は必見です。




HTTP通信とは?

HTTP(HyperText Transfer Protocol)は、インターネット上で情報をやり取りするためのプロトコル(規約)です。

HTTPを使って通信することを、HTTP通信と呼びます。

プロトコルというのは、ルールみたいなものだよ。
HTTPとは、ホームページを見るためのルールのようなものなんだ!



HTTPは、WebブラウザとWebサーバー間でデータの交換を行う際に使用されます。


このプロトコルがあるおかげで、私たちはウェブページを閲覧したり、オンラインでショッピングを楽しんだりすることができます。



HTTP通信はどうやって行うの?

HTTP通信は、クライアント(通常はウェブブラウザ)とサーバー(ウェブサイトをホスティングしているコンピュータ)間で行われます。


この通信は「リクエスト」と「レスポンス」の2ステップで構成されます。

  1. リクエスト: クライアントがサーバーに情報を要求します。例えば、ウェブページの表示やファイルのダウンロードなどです。
  2. レスポンス: サーバーがクライアントのリクエストに応答し、必要なデータを送信します。


引用:第1回 HTTPプロトコルとは|@IT


HTTP通信は、OSI参照モデルで言うところのどこで行なっているの?


HTTPは、OSI参照モデルにおいて「アプリケーション層」に位置します。

OSI参照モデルは、ネットワーク通信を7つの層に分けて表現したもので、上位から順に以下のようになっています


引用:OSI参照モデルとは?TCP/IPとの違いを図解で解説|アイディーエム



ここで注意なのが、HTTPはアプリケーション層に分類されるものの、HTTPが実際に動作して通信する場合は、トランスポート層にてTCP通信を行います。



TCPとは、Transmission Control Protocolの略です。
インターネット上でデータの確実な送受信を行うプロトコルです。

コネクション型通信と呼ばれ、通信開始前に相手と仮想的な通信路を確保した上で通信します。

UDPはTCPとは逆に、コネクションレス型通信と呼ばれます。



具体的には、HTTP通信を行う際、データの送受信を確実に行うためにTCPが使用されます。

TCPは、トランスポート層に位置するプロトコルで、データの順序や再送、フロー制御などを担当しています。



したがって、HTTPはアプリケーション層のプロトコルであり、その下の層であるトランスポート層のTCPと連携して動作します。



HTTP通信の流れ

以下の流れでHTTP通信が実現します。

  1. TCPで3wayハンドシェークによるコネクション形成
  2. アプリケーション層でHTTP要求
  3. HTTP応答
  4. TCPでコネクション切断


TCPは3wayハンドシェークにより、コネクションを形成するプロトコルです。



原則、4にあるように毎回コネクションを切断します。

しかし、何度もHTTP通信する場合に面倒なので、keep aliveという仕組みを利用します。


keep aliveすることで、しばらくコネクションを維持することができます。




HTTP通信の中身

はじめにお伝えしたように、HTTP通信はwebクライアントからサーバに送られる「リクエスト」と、サーバからwebクライアントに送られる「レスポンス」で成立します。

引用:「HTTP」の仕組みをおさらいしよう(その1)|@IT


リクエスト行

リクエストライン・ステータスライン


リクエストの場合、最初の1行はリクエストラインになります。
レスポンスの場合は、ステータスラインになります。

引用:「HTTP」の仕組みをおさらいしよう(その2)|@IT



HTTPレスポンスステータスコード
  • 100番台:情報レスポンス。リクエストが処理中であることを表す。
  • 200番台:成功レスポンス。正常にリクエストが受け取れたことを表す。
  • 300番台:リダイレクション。リダイレクトが発生した時に表示。
  • 400番台:クライアントエラー。リクエストが不正だったり、プロキシ認証が必要といった、クライアント側の不備によるエラー。
  • 500番台:サーバーエラー:webサーバ側にエラー原因があり、リクエストの処理に失敗。




HTTPリクエストメソッド

リクエスト・レスポンスのやり取りを行うために、HTTPメソッドを利用します。

代表的なメソッドは3種類です。

  1. GET:取得
  2. POST:フォームのデータを送信
  3. CONNECT:HTTPS通信時、プロキシサーバにトンネリング要求


GETメソッド

引用:「HTTP」の仕組みをおさらいしよう(その1)|@IT


ターゲットのパスは、ドキュメントルート配下のパスを記載します。




POSTメソッド

GETメソッドでフォームデータを送信する場合、下記のようにURL中にデータを埋め込むようになります。
例:https:// ~~~.com?shouhinmei=A&code=NO0011


このように、サーバに送信するデータ(ブラウザのフォームを入力したデータ)をURLに埋め込むことを、URLクエリストリングと言います。

全角文字などは、%○○(文字コード)のように、%+文字コードで埋め込みます。



HTTPヘッダ

User-Agent(ユーザーエージェント)

ユーザーエージェントは、ブラウザの種類やOS情報、検索エンジンクローラの名前などを示します。

Referer(リファラ)

どのページから生したリクエストなのかを伝えます。リンク元のページを集計する時に利用します。

Cookie(クッキー)

ブラウザを特定するための小さなデータがCookieです。
このCookieはHTTPヘッダーに含まれてサーバーに送信されています。

cookie

サーバに送信したデータをブラウザ上で保管する仕組みをcookieと言います。
ブラウザがサーバにHTTP要求すると、サーバがcookieを作成します。
サーバが作成したcookieをHTTP応答と一緒にブラウザに送ります。

次回、HTTP要求をする時に、cookieの内容と共に要求すると、サーバがユーザを判断することができます。



cookieはサーバで作られてブラウザで保管されるという点に注意しよう。
セッションキーなどの情報もcookieに格納される場合が多いよ




cookieには、属性を設定することができます。

代表的な属性はsecure属性です。

HTTPS通信時のみサーバにcookieを送ります。


ドメイン属性では、cookieをやりとりするドメインを指定することができます。

cookieは、原則としてドメインを跨いでやりとりすることはできません。
ドメインまたぎを許可してしまうと、認証の問題やセキュリティ上の問題が生じうるためです。

ドメイン属性を指定することで、やりとりするドメインを制限することができます。




Accept、Accept-Language、Accept-Encoding、Accept-Charset

どのようなデータを受け取りたいのか、言語、文字コード、画像の種類などの情報が含まれています。多言語対応のサイトがある場合、サーバーはこの情報を元に適切な言語で返したりすることができます。

If-Modified-Since / If-None-Match

ブラウザに保存されているローカルキャッシュが変更されているかどうかを問い合わせています。