力のブラウザのキャッシュを削除
質問
があるので一部のコードはマイページで人が訪れるサイトでクリアブラウザのキャッシュすることが可能ですので、ビューは変化するかを
使用言語:ASP.NET,VB.NETもちろんHTML、CSS、jQuery.
解決
.css
と.js
変更点についてである場合は、、一つの方法は、「キャッシュの無効化」するために、各リリースのファイル名に「_versionNo
」のようなものを追加することです。たとえばます:
script_1.0.css // This is the URL for release 1.0
script_1.1.css // This is the URL for release 1.1
script_1.2.css // etc.
または代替としては、ファイル名の後にそれを行います
script.css?v=1.0 // This is the URL for release 1.0
script.css?v=1.1 // This is the URL for release 1.1
script.css?v=1.2 // etc.
あなたはそれが仕事ができるかを確認するには、このリンクをチェックアウトすることができますます。
他のヒント
アップデート2012
この古い質問ですが、私は今、ウェブサイトのキャッシングのより多くの制御を持っている方法があるので、それが最新の答えまで以上に必要だと思います。
オフラインWebアプリケーションの<のhref = "のhttp:/ にはを必要とせずにあなたのウェブサイトのキャッシュバージョンを更新するために使用することができ/www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#dom-appcache-swapcache">applicationCache.swapCache()
手動でページをリロードます。
これは初心者のためのガイドから説明するHTML5ロックス上のアプリケーションキャッシュを使用するコードの例です。あなたのサイトの最新バージョンにユーザーを更新する方法:
// Check if a new cache is available on page load.
window.addEventListener('load', function(e) {
window.applicationCache.addEventListener('updateready', function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
// Browser downloaded a new app cache.
// Swap it in and reload the page to get the new hotness.
window.applicationCache.swapCache();
if (confirm('A new version of this site is available. Load it?')) {
window.location.reload();
}
} else {
// Manifest didn't changed. Nothing new to server.
}
}, false);
}, false);
を参照してください。また、詳細はMozillaの開発者ネットワーク上のアプリケーションキャッシュを使用します。
アップデート2016
物事は、Web上で急速に変化します。 この質問は、2009年に頼まれたと2012年に私は質問で説明した問題に対処するための新しい方法についての更新を投稿しました。もう4年が経過し、今ではそれはすでに廃止されているようです。コメント欄でそれを指摘しての cgaldiolo のおかげます。
現在、2016年7月、非推奨の警告が含まれての HTML標準、7.9節、オフラインWebアプリケーションのように:
この機能は、Webプラットフォームから削除されるプロセスです。 (これは何年もかかる長いプロセスである。)のいずれかを使用して この時点で、オフラインWebアプリケーションの機能は非常に落胆しています。 代わりに、サービスの労働者を使用します。
だから私は2012年に参照Mozillaの開発者ネットワーク上のアプリケーションキャッシュを使用して行います
サービス労働者が傍受がに有効になっているフェッチ場合AppCacheのための非推奨の通知を追加 -この機能はWeb標準から削除されました
推奨されていません。 一部のブラウザではまだそれをサポートするかもしれないが、それはプロセスであります 削除されています。古いまたは新しいプロジェクトでは使用しないでください。ページやWebアプリケーション これを使用すると、いつでも壊れることがあります。
はないような。一つの方法は、リロードするブラウザを強制的にコンテンツを配信する際に適切なヘッダを送信することである。
確認のWebページではありません作りますすべてのブラウザ間で、キャッシュされた。の
ここSO上"cache header"
または類似のもののために検索した場合、、あなたはASP.NET具体的な例を見つけることができます。
:あなたは、サーバー側でヘッダを制御できない場合は、呼び出されているリソースへのランダムGETパラメータを追加して、もう、あまりきれい時には唯一の方法
myimage.gif?random=1923849839
を静的リソースについての右のキャッシングは、各デプロイメントまたはファイルバージョンの値との使用クエリパラメータのことであろう。これは、各デプロイメント後にキャッシュをクリアする効果があります。
/Content/css/Site.css?version={FileVersionNumber}
ここではASP.NET MVCの例です。
<link href="@Url.Content("~/Content/Css/Reset.css")?version=@this.GetType().Assembly.GetName().Version" rel="stylesheet" type="text/css" />
アセンブリバージョンを更新することを忘れないでください。
またsimiliar問題は、このようにのんびりとるか:
に
index.html
ファイルまたマニフェスト:<html manifest="cache.manifest">
に
<head>
部付属のスクリプトのキャッシュ:<script type="text/javascript" src="update_cache.js"></script>
に
<body>
第っ挿入されonload機能:<body onload="checkForUpdate()">
に
cache.manifest
思ってすべてのファイルがしたい。現時点で重要なことで私の場合(Apache)での更新時に"バージョン"コメントとなります。また、オプションの名前のファイル"?ver=001"ものの名称で 不要.変化するだけで# version 1.01
トリガーキャッシュ更新イベントです。CACHE MANIFEST # version 1.01 style.css imgs/logo.png #all other files
この1, 2.3.ポイント のみ にindex.html.その他
GET http://foo.bar/resource.ext net::ERR_FAILED
生が"お子様"ファイルをキャッシュのページのページが既にキャッシュされます。
に
update_cache.js
ファイルを思ってこのコード:function checkForUpdate() { if (window.applicationCache != undefined && window.applicationCache != null) { window.applicationCache.addEventListener('updateready', updateApplication); } } function updateApplication(event) { if (window.applicationCache.status != 4) return; window.applicationCache.removeEventListener('updateready', updateApplication); window.applicationCache.swapCache(); window.location.reload(); }
今、あなただけの変更ファイルにマニフェストしてアップデートバージョンコメントとなります。現在の訪問index.html ページを更新します。
部品の溶液にな鉱山だったを通じてインターネットで得られるようです。
私は、オンラインクライアントの写真を取るだろうと写真が変更された場合のdivを更新する必要がありますケースを持っていました。ブラウザは、まだ古い写真を見せていました。だから私は、毎回ユニークになり、ランダムなGET変数を、呼び出しのハックを使用しました。ここでは、それが誰を助けることができる場合である。
<img src="/photos/userid_73.jpg?random=<?php echo rand() ?>" ...
EDIT 他の人が指摘したように、それは画像をリロードするので、次は、はるかに効率的なソリューションである彼らだけが変更された場合、ファイルのサイズによって、この変更を特定ます:
<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"
答えの多くはポイントを逃している - ほとんどの開発者は、キャッシュをオフにすることは非効率的であることをよく知っています。しかし、効率が重要ではなく、デフォルトのキャッシュ動作がひどく壊れている多くの一般的な状況が存在します。
これらは、ネストされた、反復スクリプトのテスト(大きなもの!)、壊れたサードパーティ製のソフトウェアの回避策が含まれています。ここで与えられた解決策はいずれも、このような一般的なシナリオに対処するのに十分ではありません。ほとんどのWebブラウザは、あまりにも積極的なキャッシュであり、これらの問題を回避するために、何の賢明な手段を提供しません。
<meta http-equiv="pragma" content="no-cache" />
わかりません。場合は、ブラウザのリクエストファイル「オフライン」モードがない限り、それは常にサーバーにリクエストを送信する必要があります。サーバーは、日付変更またはetagsのようないくつかのパラメータを読み込みます。
サーバが変更され、ブラウザがそのキャッシュを使用する必要がありますしないために304エラー応答を返します。 ETagのは、サーバー側で検証していないか、または変更された日付が現在の更新日時を下回っている場合は、サーバーは新しい変更日またはetagsのか、その両方を使用して新しいコンテンツを返す必要があります。
ブラウザに送信されたいかなるキャッシュデータが存在しない場合は、、私は、動作は不定で、ブラウザがたりないかもしれないそれらがキャッシュされる方法を教えていないファイルをキャッシュすることができると思います。あなたが反応して、キャッシング・パラメータを設定した場合には、正しくファイルをキャッシュし、その後、サーバーは304エラー、または新しいコンテンツを返すように選択することができます。
このは、それが行われるべきかです。 URLでのランダムのparamsまたはバージョン番号を使用すると、より多くの何よりもハックのようなものです。
http://www.checkupdown.com/status/E304.htmlする http://en.wikipedia.org/wiki/HTTP_ETag ます。http://www.xpertdeveloper。 COM / 2011/03 /最終更新 - ヘッダ-VS-期限が切れるヘッダ-VS-のETag / の
読みになった後、私はまた、有効期限が切れる日付があることを見ました。あなたは問題がある場合、それはあなたの有効期限が切れる日付が設定されていることかもしれません。言い換えれば、ときに、ブラウザは、それが有効期限を持っているので、それはその日の前にそれを再度要求する必要はありません、あなたのファイルをキャッシュします。つまり、サーバーにファイルを尋ねることは決してありませんし、変更されていない304を受信することはありません。有効期限に達したか、キャッシュがクリアされるまで、それは単にキャッシュを使用します。
それは私の推測ですのでは、有効期限のいくつかの並べ替えを持っていて、最終更新etagsのか、それをすべてのミックスを使用して、何日に期限切れがないことを確認してください。
の人々は多くのことをリフレッシュする傾向がある場合は、ファイルが、大きな有効期限を設定するのが賢明かもしれないが、多くのことを変更されません。
私の2セント!
私のために、次の作品へのURLを更新します:
/custom.js?id=1
?id=
後に固有の番号を追加し、新しい変更のためにそれをインクリメントすることにより、ユーザーはキャッシュを更新するCTRL + F5
を押す必要はありません。また、あなたが?id=
後に現在の時間やエポックのハッシュまたは文字列バージョンを追加することができます。
?id=1520606295
のようなもの。
私は(本番環境にまだ)私の作品、このシンプルなソリューションを実現します:
function verificarNovaVersio() {
var sVersio = localStorage['gcf_versio'+ location.pathname] || 'v00.0.0000';
$.ajax({
url: "./versio.txt"
, dataType: 'text'
, cache: false
, contentType: false
, processData: false
, type: 'post'
}).done(function(sVersioFitxer) {
console.log('Versió App: '+ sVersioFitxer +', Versió Caché: '+ sVersio);
if (sVersio < (sVersioFitxer || 'v00.0.0000')) {
localStorage['gcf_versio'+ location.pathname] = sVersioFitxer;
location.reload(true);
}
});
}
私は、HTMLがある位置の小さなファイルをしました
"versio.txt" ます:
v00.5.0014
この関数は、私のすべてのページで呼び出されるので、それはのlocalStorageのバージョン値が、現在のバージョンよりも低い場合にはチェックしないロードするとき、
location.reload(true);
...ではなく、キャッシュからサーバーからのリロードを強制します。
(明らかに、代わりのlocalStorageのクッキーや他の永続的なクライアントストレージを使用することができます)。
だけリロードするサイト全体に強制します。「versio.txt」1つのファイルをmantainingので私は、そのシンプルさのために、このソリューションを選択しました
のqueryString方法は、実装が困難であり、また、キャッシュされている(以前のバージョンにV1.1から変更した場合は、それがキャッシュに以前のすべてのバージョンを保ち、キャッシュがフラッシュされないことを意味し、キャッシュからロードされます)。
私は少し初心者だと私は私の方法が良いアプローチであることを確認するためにあなたのプロのチェック&レビューをapreciateと思います。
それがお役に立てば幸いです。
キャッシュ制御を設定しないことに加えて:ノーキャッシュを、あなたはまた、あなたがするたびに(IEのバージョンによっては、これを必要とするように見える)をリフレッシュするためのローカルコピーをご希望の場合は-1にExpiresヘッダを設定する必要があります。 P>
HTTPキャッシュを参照してください。 - 常に変更された場合は、-のでの送信、サーバーに確認してください。
used.Theトリックすることができ1つのトリックは、スクリプトタグ内のファイル名にパラメータ/文字列を追加し、変更をファイルするとき、それを変更することがありますされます。
<script src="myfile.js?version=1.0.0"></script>
ブラウザは、何が「?」の後に来るにもかかわらず、ファイルパスとして文字列全体を解釈しますパラメータがあります。だから、ワットは今起こる、あなたのファイルを更新し、次回は自分のウェブサイト上のスクリプトタグ内の番号(例<script src="myfile.js?version=1.0.1"></script>
)と、各ユーザーのブラウザを変更することで、ファイルが変更され、新しいコピーをつかむましたが表示されます。
を強制ブラウザのキャッシュをクリアするか、正しいデータをリロードするには?の私は、いくつかの作業をstackoverflowの中で説明したソリューションのほとんどを試してみましたが、しばらくした後、それが最終的にキャッシュを行い、以前ロードされたスクリプトを表示しますまたはファイル。すべてのブラウザで動作しますか?実際にキャッシュ(CSS、JSなど)をクリアしてしまうもう一つの方法はあります
私は、サーバー上のファイルの日付と時刻を変更した場合、これまで、特定のリソースを個別に再ロードすることができました。 「キャッシュをクリアすると、」それはあるべきほど簡単ではありません。代わりに、私のブラウザのキャッシュをクリアすると、私は実際にはサーバー上のソースファイルのキャッシュされた日付と時刻を変更しますキャッシュされた「感動」のサーバファイルは(エッジ、ChromeとFirefoxの上でテスト済み)とほとんどのブラウザは自動的に最もダウンロードされますことを実現しましたいただきました!サーバー(余りにコード、グラフィックスあらゆるマルチメディア)上の現在の新しいコピー。私はあなたのプログラムを実行する前に、それはほとんどの現在の日付と時刻にすべての問題のファイルの日付を変更しますので、あなただけの、サーバとの「タッチことを行う」のソリューションに関する最新のスクリプトをコピー示唆します、それはあなたのブラウザに新しいコピーをダウンロードします:
<?php
touch('/www/sample/file1.css');
touch('/www/sample/file2.js');
?>
そして...あなたのプログラムの残りの部分...
(多くのブラウザが別のコマンドに異なる動作として、異なる日付と時刻は、リフレッシュを行います場合は、それらはすべて、ファイルの時刻を確認し、お使いのブラウザでダウンロードしたコピーと比較)これは、私にこの問題を解決するためにいくつかの時間がかかりましたあなたがなって右の道を行くことができない場合は、常にそれを別の使用可能な、より良い解決策があります。よろしくと幸せなキャンプ。タッチ()ところで、または代替案では、JavaScriptのbashのsh PHPで多くのプログラミング言語で包括的に動作し、あなたは、またはHTMLでそれらを呼び出すことができます。
あなたはキャッシュをクリア、またはちょうどあなたの現在の(変更?)ページがキャッシュされていないことを確認したいですか?
後者の場合、それは
のように単純であるべきです<META HTTP-EQUIV="Pragma" CONTENT="no-cache">