683
712

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

キャッシュについて整理

Last updated at Posted at 2016-02-08

キャッシュとは

使用頻度の高いデータを高速な記憶装置に蓄えておくことにより、いちいち低速な装置から読み出す無駄を省いて高速化すること。また、その際に使われる高速な記憶装置や、複製されたデータそのもののこと。

Webサイトの表示においては、一度アクセスしたページのデータを特定の場所に保存することで、次回アクセス時の表示を速くし、サーバへの無駄なリクエストを減らせるというメリットがあります。また一口にキャッシュといっても下記の2種類があるので、どちらを指しているのか(あるいは両方か)意識しておきましょう。

  • ブラウザのキャッシュ:そのパソコンのユーザーが見たページのデータがローカルに溜まっていく。
  • キャッシュサーバのキャッシュ:不特定多数のユーザーが見たページのデータがネットワーク上に溜まっていく。

キャッシュの制御方法

✏️ HTTPレスポンスヘッダ で制御

➡️ Cache-Control ヘッダ

ブラウザやキャッシュサーバに対して、キャッシュの動作や有効期限を指定するためのものです。

ディレクティブ(コマンド) 説明
must-revalidate キャッシュが期限切れだった場合、オリジンサーバでの確認無しにキャッシュを利用してはならない
no-cache オリジンサーバでの確認無しにキャッシュを利用してはならない
no-store リクエスト、レスポンスの一切を保存してはならない
no-transform 中継者は形式変換してはならない(画像の再圧縮等を防ぐ)
public 複数ユーザーで共有できるようにキャッシュしてよい(主にキャッシュサーバ)
private 特定ユーザーだけが使えるようにキャッシュしてよい(主にブラウザ)
proxy-revalidate privateキャッシュには適用されないことを除き、must-revalidateと同じ
max-age キャッシュの有効期限を設定する(秒数)
s-maxage 共有キャッシュにおいて、max-ageディレクティブまたはExpiresヘッダで指定された値を上書きする

➡️ Expires ヘッダ

Expires "Mon, 26 Jul 1997 05:00:00 GMT"

キャッシュの有効期限を指定します。Cache-Control: max-age と同じですが、 Google Developers によると、

より広くサポートされているため、Cache-Control: max-age よりも Expires をおすすめします

とのこと。

➡️ ETag ヘッダ

同じファイルかどうか比較するための検証子です。一意に識別する値(バージョンやコンテンツハッシュ)を設定。ブラウザからのIf-None-Match リクエストヘッダと比較判断します。

➡️ Last-Modified ヘッダ

同じファイルかどうか比較するための検証子です。最後に改変された日付時刻を設定。ブラウザからのIf-Modified-Since リクエストヘッダと比較判断します。

ETagとLast-Modifiedは両方指定すると冗長になるので、どちらかだけでOK。

➡️ Vary ヘッダ

指定したヘッダ(言語、ユーザーエージェント等)毎に応答表現が変わることを伝えます。
これにより、例えば同一URLでPC向け・スマホ向けページを出し分けている場合、それぞれでキャッシュを持つことが出来ます。

✏️ HTMLの<meta>タグで制御

HTML4.xでは<meta>タグでブラウザキャッシュの制御が可能です。(ただしキャッシュサーバのキャッシュを使用してしまう可能性は残ります。)

  • キャッシュさせない
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
  • キャッシュの有効期限を設定
<meta http-equiv="Expires" content="Tue, 16 Feb 2016 14:25:27 GMT">

HTML5ではhttp-equiv属性に対してキャッシュに関するキーワードを設定することは出来ません。

Pragma directives corresponding to headers that affect the HTTP processing model (e.g. caching) must not be registered

なおWebアプリをオフラインで使う目的で策定が進められていたApplication cache APIは廃止予定 とのことです。

参考サイト

683
712
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
683
712

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?