为什么我需要使用URL指纹与遥远的未来到期的静态资产头



我读到的关于"expires"报头(http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/,例如)的一切都表明,当以这种方式利用缓存时,您需要"指纹"您的文件名,以便当您的静态资产发生变化时,浏览器将停止使用缓存中的版本,而不是获取新的版本。

然而,在我使用IIS7作为后端web服务器,并使用IE 7, FF和Chrome浏览器的测试中,我不需要这样做。如果我修改了web服务器上的文件——比如"myfile.js",那么web服务器就会发送"最后修改"的报头作为该文件的修改日期,浏览器就会接收到这个更改。在更改文件后,第一个请求返回200,随后的请求似乎从缓存中提取。

所以我肯定错过了什么,但我不知道它是什么。

您的测试有缺陷。你可能会点击"重新加载"按钮,但这并不是用户加载网站的典型方式——相反,他们会点击链接,点击书签,输入URL,等等。有些人会点击重新装填,但比例很小。

当你点击Reload时,你是在强迫浏览器发送If-Modified-Since请求。相反,如果您有一个遥远的过期日期,并以典型的方式加载页面,您将看到浏览器没有对该资源发出任何HTTP请求——这很好!

查看这篇博文获取更多信息(第4段):http://www.stevesouders.com/blog/2011/06/27/unexpected-reloads-in-webkit/

现代浏览器仍然会尝试从服务器获取任何请求的URL,但在请求中包含一个'If-Modified-Since'时间戳。服务器可以使用它来确定它是否应该发送一个200 OK和请求url的内容,或者一个304 Not modified响应来指示浏览器应该使用缓存版本。

expires报头基本上只是告诉浏览器"在这个时间点之后,你应该删除你的缓存版本并获取一个新的副本"。

最新更新