TOP > スクリプト制作メモ > ブラウザのキャッシュを制御する

≫キャッシュ機能とは

Webサイトを閲覧する際に使用するインターネット・エクスプローラやネットスケープやオペラなど多くのブラウザにはキャッシュという機能があります。

キャッシュという機能は、一度インターネットから読み込んだデータをハードディスクに保存しておき、再度表示する際にはネットワークを介さずハードディスクのデータを表示することで表示速度を上げるためのものです。

インターネット・エクスプローラの場合、メニューから

[ツール(T)]→[インターネットオプション(O)]→「全般」タブ→「インターネット一時ファイル[設定(S)]」

4つの設定ができます。
  • ページを表示するごとに確認する
    ページを開くごとにサーバへアクセスし、一時ファイルが最新かどうか確認をします。更新されていれば最新の状態を読み込みます。常に最新のページが表示されるので高速回線環境なら便利かもしれません。


  • Internet Explorerを起動するごとに確認する
    ブラウザを開いてから表示したページを再び開こうとした時はキャッシュを表示し、ブラウザを開く以前の一時ファイルとして保存されたページを開く際にはサーバにアクセスして確認します。


  • 自動的に確認する
    一定の間隔に従って、その間隔より以前に一時ファイルとして保存されたページはサーバにアクセスして確認し、以降に保存されたページは確認しません。通常はこの設定が便利です。


  • 確認しない
    一時ファイルのあるページを表示する時は、サーバにアクセスせず、一時ファイルのものを表示します。キャッシュを破棄しないとサーバへの問い合わせが行われません。
それぞれ閲覧環境(回線やページの種類)に合わせて設定しましょう。

回線が細い人にとってはこのキャッシュ機能は閲覧性向上の面でとても便利な機能です。

≫キャッシュの弊害

ブラウザのキャッシュ機能は便利な反面、更新の多いページでは逆に邪魔な存在になります。

サーバ上では更新されているのに、キャッシュが表示されるばかりで更新が反映しないということがあります。

閲覧者が自主的にブラウザをキャッシュしない設定にしてもらえれば問題ありませんが、現実的ではありません(実情、ブラウザのキャッシュ機能を有効にしている人が多い)。

そこで、ブラウザのキャッシュ機能を情報発信者側で制御する方法を紹介します。

≫キャッシュを無効に

HTMLページの場合は <head>〜</head> の間に以下の3行を書きます。
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">


Perl/CGIの場合は HTTPヘッダで以下のような出力をします。
print "Content-type: text/html\n";
print "Pragma: no-cache\n";
print "Cache-Control: no-cache\n";
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n";


PHP/CGIの場合は Perlと同じくHTTPヘッダに以下のような出力をします。
header("Content-Type: text/html; charset=文字コード");
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");


ワードやエクセルファイルなどの場合は サーバの設定を変更して、HTTPヘッダを追加します。
サーバが Apache の場合は、httpd.conf で以下の設定を加えます。
<Files ~ "\.(doc|xls)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</Files>


ただし、
これらの設定によってキャッシュを完全に抑止できる訳ではありません。
ブラウザの種類やバージョンやバグによって、上記の指定が無効だったり、ネットワーク上のプロキシサーバーがキャッシュしてしまったりする場合があります。

≫参考


TOP > スクリプト制作メモ > ブラウザのキャッシュを制御する
(C) bayashi.net