带有查询的网址会禁用缓存?


12

将查询字符串附加到URL是否会导致浏览器从不缓存它?例如,我的网站执行以下操作:

/radar-picture.png?v=sep2013

看来FireFox永远不会缓存该图片。它将根据每个请求下载。

我希望FireFox可以缓存它,只要它想要的时间就可以。我只想在v=参数更改后强制其下载。


1
我想如果只更改文件名本身而不是查询,就可以完成此操作。因此,现在文件名将为,radar-picture-sep2013.png并且在将来某个时间更改时将为radar-picture-jan2014.png。您可以将PNG的最大使用期限配置为一年,因此除非文件名更改,否则浏览器可以长时间加载缓存的图片。
vstm 2013年

Answers:


3

将查询字符串键/值对添加到静态资源(例如图像,CSS或JavaScript)会导致缓存问题

具体来说,由于您提到Firefox,因此您的问题可能与“缓存冲突”有关,其中:

Firefox磁盘缓存哈希函数可以为仅略有不同(即仅在8个字符边界上)不同的URL生成冲突。当资源散列到相同的键时,只有一种资源会持久保存到磁盘缓存中;其余具有相同密钥的资源必须在浏览器重新启动时重新获取。因此,如果您正在使用指纹识别或以其他方式通过编程方式生成文件URL,以最大程度地提高缓存命中率,请确保您的应用程序生成的URL在8个字符以上的边界上不同,从而避免Firefox哈希冲突问题。

[来源:https//developers.google.com/speed/docs/best-practices/caching ]


7
什么是“ 8个字符的边界”,如何避免这种冲突?我的网址看起来应该如何?
安德鲁

2

这个关于stackoverflow的答案声称,某些浏览器对网址栏中的回车与在URL具有查询字符串时单击链接的反应不同:https : //stackoverflow.com/a/85386/1145388

测试时,请确保您单击的是链接,而不是刷新或点击网址栏中的Enter键。


2
我认为关于stackoverflow的答案可能已过时。当我在样式表style.css?v=sep2013和150KiB 上放置查询字符串时,在FireFox background-image:url('bgimage.jpg?v=sep2013');中浏览站点(通过单击链接或在地址栏中键入内容)非常慢。
史密斯先生2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.