web-dev-qa-db-ja.com

訪問者にリソースの最新バージョンの取得を強制する(ブラウザキャッシュをバイパスする)

Webサイトの訪問者がキャッシュを消去し、新しい更新されたコンテンツを取得するにはどうすればよいですか?自分のプロジェクトの進捗状況をリンクしてフィードバックするために他のプロジェクトに送信することもありますが、実際の変更を確認するにはまずキャッシュを消去する必要があります。

新しいコンテンツをキャッシュからロードするのではなく、すぐにロードするために自分の立場からできることがあるのではないかと思っていましたか?

1
Panic

あなたのサイトは HTTPキャッシング を使用しているように聞こえますが、これは Leverage Browser Caching の形式を使用するか、ファイルのバージョン文字列を使用して調整できます。

以下の3つのメソッドがあります: Apache mod_expiresApache FilesMatch およびPHPを使用したバージョン管理文字列。

Apache mod_expires.c

<IfModule mod_expires.c> 
  ExpiresActive On
  ExpiresDefault "access plus 60 seconds"
  ExpiresByType text/html "access plus 60 seconds"
  ExpiresByType image/x-icon "access plus 60 seconds"
  ExpiresByType image/gif "access plus 60 seconds"
  ExpiresByType image/jpeg "access plus 60 seconds"
  ExpiresByType image/png "access plus 60 seconds"
  ExpiresByType text/css "access plus 60 seconds"
  ExpiresByType text/javascript "access plus 60 seconds"
  ExpiresByType application/x-javascript "access plus 60 seconds"
</IfModule>

Apache FilesMatch

<FilesMatch "\.(?i:gif|jpe?g|png|ico|css|js|swf)$">    
  <IfModule mod_headers.c>
    Header set Cache-Control "max-age=60, public, must-revalidate"
  </IfModule>    
</FilesMatch>

バージョン管理

ファイルの最後にクエリ文字列を追加すると、ブラウザはファイルが同じではないと判断し、再ダウンロードします。

リソースを編集するたびに、クエリ文字列を更新する必要があります。次に例を示します。

  1. 元のバージョン:<link rel="stylesheet" href="pro-webmasters.css">
  2. 以前のバージョン:<link rel="stylesheet" href="pro-webmasters.css?v=0.1">
  3. 最新バージョン:<link rel="stylesheet" href="pro-webmasters.css?v=0.2">

複数のcssファイル、JavaScriptファイル、およびその他のリソースがある場合、これは明らかに時間がかかります。たとえば、次のようにPHP変数を使用すると簡単になります。

<?php $VerNumber= "0.0.2"; ?>

<link rel="stylesheet" href="style.css?v=<?php echo $VerNumber; ?>">
<script src="jquery.js?v=<?php echo $VerNumber; ?>"></script>
<img src="image.jpg?v=<?php echo $VerNumber; ?>">
3
Simon Hayter