ブラウザのキャッシュについて

提供: Astarisk Works Wiki

ブラウザは表示したページをキャッシュし、 次回以降表示するときにキャッシュデータを表示し、サーバへのアクセスは行わない。 この動作はIEやFirefox等PC上で動作するブラウザに標準的に実装されている

アプリケーション上の要件によりキャッシュを禁止したい場合がある。 キャッシュを禁止する方法は主に2つある。


METAタグによるキャッシュの禁止

1つはキャッシュさせたくないHTMLページのheadタグ内に次のタグを追加することでキャッシュを禁止できる。

<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT"/>

一般的による使われる記述ですが、STBでは実際には次の行だけでもページはキャッシュしなくなる。

<meta http-equiv="Pragma" content="no-cache"/>

上記のタグの追加でキャッシュされなくなるのはそれを記述しているHTML(JSP、PHP等で動的に生成されているものも含む)だけで、そのHTMLからリンクされている画像、CSS、JSファイルはキャッシュされ、2度目にそのHTMLにアクセスした際には画像、CSS、JSファイルにはリクエストが発行されず(サーバにアクセスせず)、STB内のキャッシュデータが表示される。また、キャッシュを禁止しているデータも毎回全データをサーバからダウンロー ドするのではなく、変更があったときのみデータをダウンロードする。

キャッシュ禁止されたデータへ2度目以降のアクセスする場合、ブラウザは次の行をリクエストヘッダに追加する。

If-Modified-Since: Thu, 03 Sep 2009 04:23:25 GMT 

このヘッダを見て、一般的なWebサーバはリクエストのあったコンテンツに変更があると思ったらデータをレスポンスし、変更が無いと思ったら、304 Not Modifiedを返しデータは送信しない。

304を受けたブラウザは以前から変更無しと認識し、キャッシュデータを表示する。 ただし、If-Modified-Since: が有効なのは一般的には静的データのみで動的に生成しているデータはいつもデータがレスポンスされる。

この方法では結局、HTMLのキャッシュを禁止することはできるが、画像、CSS、JSのキャッシュは禁止できない。ただ、これらのファイルは 静的なデータとして用意されることが多く、キャッシュされても問題ない場合がほとんど。

レスポンスヘッダでキャッシュを禁止する場合

2つめの方法は、サーバの設定でレスポンスヘッダにPragmaヘッダやExpiresヘッダを追加することである。 Apacheを利用する場合、mod_headersやmod_expiresを利用することで実現可能。JavaならばHttpServletResponse::setHeaderメソッドで設定することができる。

この方法でもブラウザのキャッシュ動作は1つめの方法と同様である。 ただし、この方法では画像、CSS、JSに対してもキャッシュ禁止を指定することができる。動的に生成している画像やJSのキャッシュを禁止する場合にはこのレスポンスヘッダ追加する方法でキャッシュを抑制することができる。

また、開発中など静的な画像等のデータが頻繁に変更になる場合には開発機のWebサーバでキャッシュを禁止するようにリクエストヘッダを追加する設定を行うと効率的。

個人用ツール