web-dev-qa-db-ja.com

ブラウザにWebページのキャッシュバージョンを強制的に更新させる方法

私は、Apache confファイルの準備が不十分であるため、数年先のWebサイトURLをキャッシュするようにユーザーに指示したWebサイトを持っています。その結果、人がサイトにアクセスするとき、多くの場合、ページを要求することさえ試みません。ブラウザは、キャッシュからHTMLをロードするだけです。

このWebサイトはメジャーアップデートが行われようとしているので、ユーザーが見られるようにしたいと思います。ユーザーに実際にWebページを再要求させる方法はありますか?一部のユーザーは、F5を押していない限り、古いWebページが数年間表示されることを恐れています。

25
Chris

異なるURLを使用します。 Webサイトへのメインエントリポイント(メインインデックスファイルなど)がキャッシュされている場合、問題が発生しています...別のドメイン名を登録する必要がありますか?

18
liori

最初にこれを達成するためのいくつかのオプションがあります。セクションでメタタグを追加します。

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

基本的に、ブラウザはページをキャッシュしません。

別のオプションは、セッションを設定することです。これにより、ブラウザが移動するたびに新しいセッションが強制され、ブラウザがキャッシュではなくサーバーからページを取得するようになります。

<?php
session_start();

$_SESSION = array();
session_destroy();

?> 

これを数日間ウェブサイトに追加してから削除できます。それがうまくいくかどうかはわかりませんが、おそらくあなたはそれが便利だと思うでしょう

5
Sorantis

「メジャーアップデート」が数週間(2または3週間)である場合は、Apache confを再構成するだけで十分です(htmlの将来的なものはなく、ほとんど変更されないアセットとコンテンツのみ) )。 Firefoxのキャッシュはデフォルトで最大50MBです。画像もキャッシュされ、最新のWebサイトには多くのコンテンツがあるため、それほど多くありません。

完全ではありません-しかし、それは私がすることです-URLを変更したくない、または変更できない場合;)

4
biophonc

これを行う方法はないと思います。彼らがあなたのサーバーに決して連絡しないなら、あなたはそれについて本当に何もすることができません。

2
Jack Ryan

何年も遅れていますが、それは将来の誰かを助けるかもしれません:何年も未来にキャッシュされていない任意のjavascriptファイルを持っている場合(つまり、実行する方法がある場合)キャッシュされたサイトの新しいjs)、キャッシュをプログラムでクリアするjsを追加します。設定が修正され、更新が完了したら、キャッシュクリアリングjsを削除します。

ブラウザのキャッシュをクリアするjqueryのCtrl + F5

1
alexanderbird

すべてのリソースのURLを変更する

1
Alex. S.

この質問は非常に古いことを理解していますが、実行可能な答えがあります。

もちろん、一般的なキャッシュ(長期的なキャッシュではない)を避けるために、新しいURLを強制することができます...

つまり.

  • 静的.js/.css/.htmlファイルにクエリを追加します
  • キャッシュなしのメタプラグマタグを追加する
  • サーバー側のリダイレクト、キャッシュなし、Cookie、セッションなどの排除.

ただし、このようなシナリオ(以前は長いキャッシュ用に編集されたApache .conf)では、SEOの目的でドメインを変更できないため、SEOへの影響を最小限に抑える「粗悪なハック」を使用できます。

インデックスページ(index.php)を新しいページ(index_new.php)にコピーし、httpd.conf(または同等のもの)を編集して、DirectoryIndexが新しいページになるようにします。その後、古いページを削除または移動するだけで、理論的には常に新しいページにリダイレクトされるはずです。

つまりDebian/Ubuntuの場合:

cd /var/www
cp index.php index_new.php
Sudo vim /etc/Apache2/sites-enabled/000-default

    <Directory /var/www/>
        ...
        DirectoryIndex index_new.php
    </Directory>

mv index.php index_old.php
Sudo service Apache2 restart

そしてそこに行きます。

1
Carmelo Vargas

次のように、HTMLファイル内で必要なすべての変更を行うことができます。

<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

ただし、Apacheにmod_expires.cモジュールを使用するように明示的に指示し、httpd.confファイルにいくつかのディレクティブを追加することもできます。

<IfModule mod_expires.c>
  # Turn on the module.
  ExpiresActive on
  # Set the default expiry times.
  ExpiresByType text/html "modification plus 5 seconds"
  ExpiresByType text/javascript "modification plus 5 seconds"
  ExpiresDefault "access plus 2 days"
</IfModule>

この方法では、httpヘッダーのcache-controlを追加し、応答に期限切れになります。これにより、ブラウザは、Originでファイルが変更されてから5秒後、これらの種類のファイルに対して、他のすべての種類のファイル用のブラウザ。

お役に立てれば。

0
Camilo