2017-02-22 6 views
0

私はキャッシュを無効にするmetaタグHTMLを使用していたので、私は私のページの上部にこれを置くことによって、ヘッダーの推奨使用してキャッシュを無効:ページキャッシュを無効にしても、リソースはキャッシュされません。私は、ファイルがローカルで提供される場合にのみ動作を学んだまで

header("Cache-Control: no-cache, no-store, must-revalidate"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

答えが見つからず、尋ねるのが愚かかもしれませんが、これでリソースのキャッシュが無効になるわけではありませんか?私は自分の開発ツールとネットワークタブを見て、毎回新鮮なページが読み込まれていることに気付きましたが、CSSやJavascriptなどのリソースはまだキャッシュからロードされていました。ページリソースがキャッシュされることを防ぎますが、実際にはそれが本当かどうかはわかりません。それでは、私はそうのようなリソースへのいくつかのバージョン管理を追加したんでした:

<link rel="stylesheet" href="css/style.css?version=1"> 

私が望んでキャッシュされてからリソースを、停止したことが、その後、いくつかのより多くを読んだ後は、追加ヘッダがするために使用することができると思われます特定のファイル形式をターゲットにしてキャッシュされないようにすることもできますが、バージョン管理と同じ結果が得られます。

これについて私の理解は正しいのですか、あるいは方法の悪い練習を混ぜていますか?

+0

Webサーバーレベルでキャッシュしていると思われますか? IISではこのオプションがあります。確かに他の人も確信しています。 – Oscar

+2

、appache:http://httpd.apache.org/docs/current/mod/mod_expires.html – nogad

答えて

1

あなたの所見と理解は正しいです。例えば、あなたのPHPでキャッシュヘッダーを設定すると、それらはそのページに対してのみ有効です。ビューのブラウザの観点からそれを見てください:

  • リクエストページ -
  • それをキャッシュしないよう指示して応答を受信し解析は
  • リソースのURIを(CSS、JS、IMGなど)を取得し、ページを受け取りました
  • は、これらの各リソースの要求を送信 - 受信応答

この最後の応答でそれらをキャッシュしないようにブラウザを伝える何のヘッダが存在しない場合、それらは、標準的なルールごとにキャッシュされます。

キャッシュを防止するさまざまな方法があります。 1つはあなたが記述しているものです。つまり、常に変化するパラメータをリクエストされたURIに追加します。このように、リクエストされるたびに、別のパラメータでリクエストされます。それはまだキャッシュされますが、次のリクエストはこのリクエストと一致せず、キャッシュは使用されません。

もう1つは、Webサーバーの構成を変更して、特定の種類のリソース(ファイル名、拡張子、コンテンツの種類など)をキャッシュしないことを示します。例えば、Apacheの設定では、次にはキャッシュがどのファイルに対してまったく発生しない必要があることを示しています

  • は、クライアントが応答を取得することができます:

    <Files *> 
        Header set Cache-Control: "private, pre-check=0, post-check=0, max-age=0" 
        Header set Expires: 0 
        Header set Pragma: no-cache 
    </Files> 
    

    は、キャッシングのアイデアが二つあることに注意してください。より速く、以前に使用しては

はそのためcarefもない少数の応答を提供することによって、サーバーの負荷

  • 低リソースのローカルコピーをダウンロードulはキャッシングをオフにします。あなたが扱う必要のあるリクエストの数を大幅に過小評価した場合、(極端な場合には)サーバーを強制終了させる可能性があります。

  • +0

    ブラウザのPOVをありがとうございました。キャッシュしない最初の指示がページの他のすべてに流れ込むと思った理由はわかりませんが、今理解しています! – Slime

    +1

    これを行っても、ISPなどのさまざまな場所でファイルがキャッシュされる可能性があります。 – nogad

    +0

    @nogadが正しい。一部のプロキシは、キャッシュヘッダーを無視したり、取り除いたりすることがあります。 –

    関連する問題