👌

インターネット概論~Cookie~

2021/08/02に公開

HTTPはステートレスなプロトコルのため、状態管理ができません。たとえば、ECサイトでのカート機能は実現できません。そこで、状態管理を持たせるために追加せれた機能がCookieです。

Cookieの仕組みは以下のとおりです。

  1. クライアントからWebサーバに初回リクエストを送信する
  2. WebサーバーがクライアントにCookieの値を設定するレスポンスを返す
  3. クライアントはCookieの値を保存し、WebサーバーへのリクエストにCookieの値を含める
  4. WebサーバーはCookieの値を読み込み、コンテンツを返す。必要に応じて新たなCookieの値を設定する
  5. 3以降を繰り返し

同一コンテンツの送信を回避する

クライアントがWebサーバーに接続する際は、基本的には毎回リクエストを送ってレスポンスを返します。しかし、コンテンツによっては変更頻度の低いものもあり、クライアント側でキャッシュしておくことで、不要な通信を減らすことができます。

コンテンツの中身の判別方法として、最終更新時間を使う方法と、ユニークな識別子を使う方法があります。

最終更新時間を使う方法

  1. 初回アクセス時に、最終更新時間を取得する
  2. 2回目以降のアクセスで前回の最終更新時間を送信する
  3. Webサーバーで最終更新時間を比較し、更新がなければコンテンツの送信をしない

ユニークな識別子を使う方法

  1. 初回アクセス時に、Etagを取得する
  2. 2回目以降のアクセスでEtagを送信する
  3. WebサーバーでEtagを比較し、更新がなければコンテンツの送信をしない

Etagの生成にはコンテンツの中身が使用され、コンテンツの中身が変わるとEtagの値も変わります。

どちらの方法も、行っていることはほとんど変わりません。しかし、Etagと最終更新日時のどちらも使用した場合には、Etagが優先されます。Etagのほうがより厳密に処理できるためです。

バーチャルホスト

Webサーバーでは、通常1つのWebアプリケーションしかホスティングできません。しかし、Webアプリケーションが増えるたびに、サーバーを追加するのは大変です。

そこで、1つのWebサーバーから複数のWebアプリケーションが提供できる機能が追加されました。それが、バーチャルホストです。

Webサーバーは、Hostヘッダーフィールドの値で、どのホスト名でアクセスされたのかを判断できるようになります。このホスト名の情報でWebサーバーは複数のアプリケーションのホスティングができるようになります。

参考書籍

WEB+DB PRESS Vol.122

Discussion