27

新しいバージョンが利用可能になるまで、JavaScript、CSS、画像などのリソースをブラウザーでキャッシュし、その後、ブラウザーが新しいバージョンを取得してキャッシュするようにするのが一般的です。

解決策の 1 つは、リソースのファイル名にバージョン番号を埋め込むことですが、この方法で管理するリソースをリビジョン番号のあるディレクトリに配置しても同じことになりますか? ブラウザのキャッシュでキーとして使用されるファイルへの URL 全体ですか、それともファイル名自体といくつかのメタデータだけですか?

コードが fetching から に変更された場合、/r20/example.js/r21/example.jsリビジョン 20example.jsがキャッシュされていたのに、代わりにリビジョン 21 がフェッチされ、キャッシュされていることを確認できますか?

4

10 に答える 10

51

はい、 URL の任意の部分の変更 (HTTP および HTTPS プロトコルの変更を除く) は、ブラウザー (および中間プロキシー) によって別のリソースとして解釈されるため、ブラウザー キャッシュに別のエンティティが作成されます。

アップデート:

この ThinkVitamin の記事で、Opera および Safari/Webkit ブラウザーは ?query=strings を含む URL をキャッシュしないという主張は誤りです

URL にバージョン番号パラメーターを追加することは、キャッシュ無効化を行うための完全に受け入れられる方法です。

ThinkVitamin の記事の著者を混乱させたのは、Safari と Opera のアドレス/ロケーション バーで Enter キーを押すと、クエリ文字列を含む URL の動作が異なるという事実です。

ただし、(これが重要な部分です! ) Opera と Safariは、Web ページに埋め込まれた/リンクされた画像とスタイルシートとスクリプトをキャッシュすることに関しては、IE と Firefox と同じように動作します。URL の文字。(これは、通常の Apache サーバーでの簡単なテストで確認できます。)

(私がそれを行うという評判があれば、現在受け入れられている回答についてコメントしたでしょう。:-)

于 2008-09-17T17:02:05.517 に答える
2

HTTPオブジェクトを識別するために必要な最小値は、クエリ文字列パラメータを含むフルパスによるものです。一部のブラウザはクエリ文字列を使用してオブジェクトをキャッシュしない場合がありますが、それはキャッシュのキーとは関係ありません。

パスがもはや十分ではないことを覚えておくことも重要です。HTTP応答のVary:ヘッダーは、Cookieやエンコーディング値などのキャッシュキーを決定するために使用する必要があるURL以外のものをブラウザ(またはプロキシサーバーなど)に警告します。

基本的な質問ですが、はい、.jsファイルのURLを変更するだけで十分です。キャッシュキーを決定するものについてのより大きな質問には、URLとVary:ヘッダーの制限があります。

于 2008-09-17T15:40:15.963 に答える
2

ブラウザでリソースをキャッシュするために使用されるのは URL 全体であることを 99.99999% 確信しているため、URL スキームは正常に機能するはずです。

于 2008-09-17T14:46:23.703 に答える
0

URL全体。いくつかの古いブラウザで、大文字と小文字が区別されるという奇妙な動作を見てきました。

于 2008-09-17T16:38:56.943 に答える
0

依存します。これは完全な URL であると想定されていますが、一部のブラウザー (Opera、Safari 2 ) は、異なるパラメーターを持つ URL に対して異なるキャッシュ戦略を適用します。

最善の策は、ファイルの名前を変更することです

ここに非常に賢い解決策があります(PHP、Apacheを使用)

http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/

戦略ノート: 「HTTP キャッシング仕様の文字によると、ユーザー エージェントはクエリ文字列を含む URL を決してキャッシュすべきではありません。Internet Explorer と Firefox はこれを無視しますが、Opera と Safari は無視しません。すべてのユーザー エージェントがリソースをキャッシュできるようにするには、クエリ文字列を URL から除外する必要があります。」</p>

http://www.thinkvitamin.com/features/webapps/serving-javascript-fast

于 2008-09-17T14:46:14.687 に答える
0

はい。別のパスは、キャッシュの観点からは同じです。

于 2008-09-17T14:46:42.317 に答える
0

もちろん、パス全体を使用する必要があります '/r20/example.js' vs '/r21/example.js' は、そもそも完全に異なる画像になる可能性があります。あなたが提案するのは、バージョン管理を処理する実行可能な方法です。

于 2008-09-17T14:47:41.597 に答える
0

既存の回答に加えて、ServiceWorkers やオフライン プラグインなどを使用している場合は適用されない可能性があることを追加したいだけです。その後、ServiceWorker の設定方法に応じて、さまざまなキャッシュ ルールが発生する可能性があります。

于 2018-10-24T12:55:06.583 に答える
-1

ほとんどのブラウザーでは、完全な URL が使用されます。一部のブラウザーでは、URL にクエリがある場合、ドキュメントはキャッシュされません。

于 2008-09-17T14:52:04.283 に答える