web-dev-qa-db-ja.com

展開後に強制的にキャッシュを更新する

そのファイルを参照するURIを変更できない場合(たとえば、タイムスタンプパラメータを追加できない場合)に、クライアントのキャッシュにHTMLファイルを強制的に再読み込みさせる方法はありますか?

これが私の状況です:

  • 1000ユーザーにデプロイされたプラグイン
  • そのプラグインは、example.com/page.htmlを呼び出すscript.jsをロードします
  • リソースURI example.com/page.htmlは変更できません(プラグインの更新なし)
  • page.htmlが変更されました。古いpage.htmlをユーザーのキャッシュからクリアして、新しいpage.htmlをロードできるようにする必要があります。

何か案は? htaccess? PHP APIは、新旧のpage.htmlが呼び出しますか?

ありがとう!

18
Kyle

まあ、ページがブラウザによってすでにキャッシュされている場合、キャッシュされたバージョンが古いと判断する前に再度チェックする必要がないため、キャッシュされたバージョンを使用しないように指示するのは困難です。 ctrl + f5を押すように通知するすべてのユーザーにカタツムリのメールを送るだけです:)

ただし、ブラウザが少なくともHEADリクエストを試行して、変更されたタイムスタンプをチェックしてから、キャッシュされたバージョンを提供する可能性があります。この場合、次の方法が役立ちます。

ブラウザーは、HTTP標準ヘッダーを使用してWebサーバーからコンテンツをネゴシエートします。ブラウザにファイルをキャッシュしないように指示する場合は、適切なHTTPヘッダーを送信する必要があります。 PHPでこれを行う場合は、header関数を使用して、適切なHTTPヘッダーをブラウザーに送信できます。

header('Cache-Control: no-cache');
header('Pragma: no-cache');

HTML経由で実行する必要がある場合は、ページヘッダーで次の操作を実行できます。

<meta http-equiv="Expires" content="Tue, 01 Jan 1995 12:12:12 GMT">
<meta http-equiv="Pragma" content="no-cache">

ただし、ブラウザがページをキャッシュしないというリクエストを受け入れるかどうかを確認する方法はありません。 eTagsのようないくつかの他のものがありますが、率直に言って、ページがすでにキャッシュされている場合、それはあなたを助けることになるとは思いません。


[〜#〜]更新[〜#〜]

Response Cacheability のHTTP/1.1仕様から:

キャッシュバリデーターも応答に関連付けられた明示的な有効期限もない場合、キャッシュされるとは想定されていませんが、特定のキャッシュはこの想定に違反する可能性があります(たとえば、ネットワーク接続がほとんどまたはまったくない場合)。

31
rdlowrey

おそらくPHPを使用して、タイムスタンプをjavascript呼び出しに追加できます。次に、これをこの期間実行できます...........例:

check_if_cache_should_be_disabled.php

<?php
$deployment_flag = true; // Uncomment this if you want to disable normal cache.
//$deployment_flag = false // Uncomment this if you want to enable normal cache.
?>

page.php

<script src="/js/script.js<?php 
require('check_if_cache_should_be_disabled.php');
//  File Get Contents can be used for a remote server
//file_get_contents('http://yourserver.com/check_if_cache_should_be_disabled.php');
if ($deployment_flag == true) {
print ( '?ts='.date() );
}
?>"></script>
4
user2097982

ファイル名を変更できます。たとえば、ブラウザにページを新しいページとしてロードさせるpage_v2.htmlなどです。

0
DeepBlue