そのファイルを参照するURIを変更できない場合(たとえば、タイムスタンプパラメータを追加できない場合)に、クライアントのキャッシュにHTMLファイルを強制的に再読み込みさせる方法はありますか?
これが私の状況です:
example.com/page.html
を呼び出すscript.js
をロードしますexample.com/page.html
は変更できません(プラグインの更新なし)page.html
が変更されました。古いpage.html
をユーザーのキャッシュからクリアして、新しいpage.html
をロードできるようにする必要があります。何か案は? htaccess? PHP APIは、新旧のpage.html
が呼び出しますか?
ありがとう!
まあ、ページがブラウザによってすでにキャッシュされている場合、キャッシュされたバージョンが古いと判断する前に再度チェックする必要がないため、キャッシュされたバージョンを使用しないように指示するのは困難です。 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仕様から:
キャッシュバリデーターも応答に関連付けられた明示的な有効期限もない場合、キャッシュされるとは想定されていませんが、特定のキャッシュはこの想定に違反する可能性があります(たとえば、ネットワーク接続がほとんどまたはまったくない場合)。
おそらく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>
ファイル名を変更できます。たとえば、ブラウザにページを新しいページとしてロードさせるpage_v2.htmlなどです。