クエリ付きURLはキャッシュを無効にしますか?


12

クエリ文字列をURLに添付すると、ブラウザがそれをキャッシュすることはありませんか?たとえば、私のサイトは次のようなことをしています。

/radar-picture.png?v=sep2013

そして、FireFoxがその画像をキャッシュすることはないようです。リクエストごとにダウンロードされます。

必要な限り、FireFoxにキャッシュしてほしい。v=パラメータが変更された場合にのみダウンロードを強制したい。


1
クエリではなくファイル名自体を変更するだけで、これを達成できると思います。したがって、ファイル名は次のようにradar-picture-sep2013.pngなり、将来のある時点で変更されると、ファイル名も同じになりますradar-picture-jan2014.png。PNGのmax-ageを1年間に設定できるので、ファイル名が変更されない限り、ブラウザーはキャッシュされた画像を長期間ロードできます。
vstm 2013

回答:


3

クエリ文字列のキーと値のペアを静的リソース(画像、CSS、JavaScriptなど)に追加すると、キャッシュの問題が発生する可能性があります

具体的には、Firefoxについて言及したため、問題は「キャッシュの衝突」に関連している可能性があります。

Firefoxのディスクキャッシュハッシュ関数は、わずかに異なる、つまり8文字の境界でのみ異なるURLの衝突を生成できます。リソースが同じキーにハッシュする場合、リソースの1つだけがディスクキャッシュに保持されます。同じキーを持つ残りのリソースは、ブラウザの再起動時に再フェッチする必要があります。したがって、フィンガープリントを使用している場合や、プログラムでファイルURLを生成している場合は、キャッシュヒット率を最大化するために、8文字を超える境界で異なるURLがアプリケーションで生成されるようにして、Firefoxハッシュの衝突の問題を回避します。

[ソース:https : //developers.google.com/speed/docs/best-practices/caching ]


7
「8文字の境界」とは何ですか。この衝突を回避するにはどうすればよいですか。私のURLはどのように見えるべきですか?
Andrew

2

Stackoverflowに関するこの回答は、URLにクエリ文字列が含まれている場合、一部のブラウザーはアドレスバーでEnterキーを押すのとリンクをクリックするのとでは反応が異なると主張しています:https : //stackoverflow.com/a/85386/1145388

テストするときは、URLバーでEnterキーを押して更新するのではなく、リンクをクリックしていることを確認してください。


2
stackoverflowの回答は古くなっていると思います。クエリ文字列をスタイルシートstyle.css?v=sep2013と150KiB に配置すると、FireFox background-image:url('bgimage.jpg?v=sep2013');で(リンクをクリックするか、アドレスバーに入力して)サイトをナビゲートするのが非常に遅くなります。
スミス氏
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.