キャッシュ
キャッシュとはキャッシュ使うメリットキャッシュの種類と格納場所キャッシュの制御方法キャッシュ制御に関わるHTTPヘッダ一覧キャッシュ制御の例Cache-Controlヘッダによる制御の例EtagヘッダとLast-Modifiedヘッダによる制御の例Varyヘッダによる制御の例参考リンク
キャッシュとは
キャッシュとは、ユーザがアクセスしたWebページのデータを保存しておき、再度同じページへアクセスがあった際、Webサーバへアクセス無しに高速にWebページを提供する機能。
キャッシュ使うメリット
- Webサーバ側は、アクセスが多い場合でも処理の負荷を軽減できる。
- ユーザ側は、ページ読み込みまでの待ち時間を短縮できる。
キャッシュの種類と格納場所
キャッシュは大きく分けて「共有キャッシュ」と「プライベートキャッシュ」に分類される。
キャッシュの種類 | 概要 | キャッシュ格納場所 |
---|---|---|
共有キャッシュ | 複数ユーザ間で共用されるキャッシュ。 サイトのロゴなどの全ユーザでアクセス内容が同一のデータを保存する。 | ProxyサーバやCDN(Content Delivery Network) |
プライベートキャッシュ | ユーザがアクセスした全ページを保存するキャッシュ。 個人情報やログイン後のページなど、共有キャッシュには格納できないデータも保存できる。 | 各ユーザのブラウザ |
キャッシュの制御方法
HTTPヘッダの情報を基に「キャッシュを保存するか?」や「キャッシュを利用するか?」を決める。
キャッシュ制御に関わるHTTPヘッダ一覧
キャッシュ制御の例
Cache-Controlヘッダによる制御の例
Cache-Controlヘッダに、キャッシュ禁止を示す値「no-store」が指定されている場合の通信例を挙げる。
EtagヘッダとLast-Modifiedヘッダによる制御の例
Webページの内容が同じ間、コンテンツの送信を省略することで、回線帯域を節約する制御の例を挙げる。
Varyヘッダによる制御の例
多言語対応していて表示言語がAccept-Languageヘッダに基づいて決定されるウェブサイトにて、Varyヘッダを用いてキャッシュ制御をする例を挙げる。
ユーザAとユーザBがAccept-Languageヘッダの値を 「ja」 に設定し、ユーザCが 「en」 に設定したとする。この場合、ユーザAとユーザBは表示言語が日本語、ユーザCは英語を要求することとなり、同じURLでも異なる内容(異なる言語)のウェブページを受け取る。
このようなケースで、キャッシュを正しく機能させるためには、Varyヘッダが必要となる。
サーバはレスポンスに 「Vary: Accept-Language」 を含めることで、キャッシュにこのレスポンスが「Accept-Language」 値によって異なるレスポンスであることを伝える。
その結果、キャッシュはAccept-Languageヘッダの値に基づいて適切なレスポンスを提供することができる。