2009-08-27 14 views
380

私はあなたがウェブサーバーのヘッダーへのアクセスを持っていないときに使用してキャッシュをオフにすることができることをお読みください。<meta>タグを使用して、すべてのブラウザでキャッシュを無効にしますか?

<meta http-equiv="Cache-Control" content="no-store" /> 

しかし、私はまた、これはIEの一部のバージョンでは動作しないことをお読みください。 < >というタグがすべてのブラウザでキャッシュを無効にするタグがありますか?

+1

bobinceとdpbの回答の組み合わせが最適です。すべての拠点をカバーします。 – nickf

+2

http://www.i18nguy.com/markup/metatags.htmlこのサイトでは、HTTPでキャッシュを無効にすることを推奨しているため、サイトが中間サーバーに格納されません。誰かを助けるかもしれないと思った。 – Bodo

+0

私のように、戻るボタンと "閉じたタブの再オープン"に苦労している人には、別の質問から[この回答](http://stackoverflow.com/a/19196020/993683)を見てください。それはハッキーですが、ヘッダーベースの解決策は私のために働いていませんでした。この小さなJSスニペットは素晴らしい(簡単なJSに変換するのは簡単です)。 – JoeRocc

答えて

656

これを盲目的にコピーしないでください!

このリストは、さまざまな手法の例です。直接挿入するのではなく、 を挿入してください。コピーされると、2番目のものは最初のものを上書きし、 4番目のものは、http-equiv 宣言のために3番目を上書きし、W3Cバリデータで失敗します。多くとも、http-equiv宣言のうちの1つを とすることができます。プラグマ、キャッシュ制御、 の有効期限が切れます。最新の最新のブラウザを使用している場合、これらは完全に時代遅れです。とにかくIE9の後に 。 ChromeとFirefoxは、まったく期待通りに動作しません。

<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<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" /> 

実はすべてでこれらを使用しないでください!

キャッシュヘッダーはメタ要素では信頼できません。 サイトとユーザーの間のWebプロキシは、すべて を完全に無視します。 Cache-ControlとPragmaのようなヘッダーには常に実際のHTTPヘッダーを使用する必要があります。

正しい情報については、ページの上部に記載されている複製を参照してください。

+1

3番目のタグが小文字にある特別な理由はありませんか? –

+0

特別な理由はありません。 DOCTYPE宣言やHTML対XHTMLの使用など、他のことを考慮する必要があります。 –

+218

詳しい説明がいいでしょう。繰り返しキャッシュ制御と有効期限が切れるのはなぜですか?なぜこれらのすべてが必要なのですか?何が1980年に特別なのですか?プラグマの違いは何ですか:no-cacheとcache-control:no-cache?もっと説明するといいですね。 –

5

プラグマは、あなたの最善の策である:

<meta http-equiv="Pragma" content="no-cache"> 
+7

...これは古いものですので、新しい実装では通常、これはキャッシュヘッダーcache-control:no-cacheとして解釈されるため、これが望ましいと考えられます。実際には、より現代的な

23

それはIE5では動作しませんが、それは大きな問題ではありません。

しかし、キャッシュヘッダーはメタ要素では信頼できません。 1つは、サイトとユーザーの間のすべてのWebプロキシが完全に無視されます。 Cache-ControlやPragmaなどのヘッダーには常に実際のHTTPヘッダーを使用する必要があります。

+0

@bobinceを使用する方が良いでしょう。私はウェブプロキシに関する問題があればこれを念頭に置いていきますが、私の "チーム"は私をフロントエンドに完全に保ち、私にヘッダーへのアクセスを与えません。 – leeand00

+4

これが2009年に書かれたとしても、IE5互換性を持ち出すことは無関係でした。 –

+12

IE2でも動作しません。 –

4

同じサービスコール(長いポーリング)を繰り返すときに、サービスコールに関するキャッシングの問題が発生したことに気付きました。メタデータの追加は役に立たなかった。 1つの解決方法はtimestampを渡して、ieはそれが異なるhttpサービスリクエストだと確信させることです。

<meta http-equiv="expires" content="timestamp">

+0

これは本当に賢いですotもクロムで動作します – Geomorillo

-2

これは偉大なケーススタディへのリンクがある

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Expires" CONTENT="-1"> 
+6

それを試してみませんか?説明できますか? –

+0

いくつかの説明はいいと思います... –

+0

Chromeでは動作しません。 –

72

使用してみてください:それはそう自動的に損はない、このタグを更新するために、サーバー側のスクリプトコードスニペットを追加して、私のために働きましたキャッシュを制御する業界全体の誤解。要約すると

http://securityevaluators.com/knowledge/case_studies/caching/

、この記事によると、唯一のCache-Control: no-storeはクロム、Firefox、およびIEで認識されています。 IEは他のコントロールを認識しますが、ChromeとFirefoxは認識しません。

+2

私は、ChromeがCache-Control:no-cache(後で100%の条件付き要求)にうまく反応することを発見しました。条件付き要求を試みなくてもキャッシュからロードされることがある「ストアなし」。 Firefoxは「no-store」にうまく対応しますが、直後にリロードするとキャッシュからロードされることがあります。どのような混乱! – ianbeks

関連する問題