【问题标题】:Why do I need to use URL Fingerprinting with far-future expires headers on static assets?为什么我需要在静态资产上使用带有远期过期标头的 URL 指纹识别?
【发布时间】:2024-01-24 07:19:01
【问题描述】:

我读到的有关“过期”标头的所有内容(例如,http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/)都表明,当利用缓存时以这种方式,您需要“指纹”您的文件名,以便当您的静态资产更改时,浏览器将停止使用缓存中的版本并取而代之的是获取新的。

但是,在我使用 IIS7 作为后端网络服务器并使用 IE 7、FF 和 Chrome 浏览器的测试中,我不需要这样做。如果我更改了网络服务器上的文件——比如“myfile.js”,那么网络服务器会发送“最后修改”标题作为该文件的修改日期,并且浏览器都会收到该更改。他们在更改文件后为第一个请求返回 200,随后的请求似乎从缓存中提取。

所以我肯定错过了一些东西,但我不知道它是什么。请赐教。

【问题讨论】:

    标签: apache iis browser http-headers browser-cache


    【解决方案1】:

    您的测试有缺陷。您可能会点击“重新加载”按钮,但这不是用户通常加载您网站的方式 - 相反,他们点击链接、点击书签、输入 URL 等。有些人点击重新加载,但比例很小.

    当您点击重新加载时,您会强制浏览器发送 If-Modified-Since 请求。相反,如果您有一个遥远的未来到期日期并以典型方式加载页面,您会看到浏览器不会对该资源发出任何 HTTP 请求 - 这很好!

    有关更多信息,请参阅此博客文章(第 4 段):http://www.stevesouders.com/blog/2011/06/27/unexpected-reloads-in-webkit/

    【讨论】:

      【解决方案2】:

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

      expires 标头基本上只是告诉浏览器“在此时间点之后,您应该删除缓存版本并获取新副本”。

      【讨论】:

      • 因此,如果我在 2011 年 10 月 1 日修改文件,并且用户在 2011 年 11 月 1 日访问,并且他们的浏览器发送了 10 月 15 日的“If-Modified-Since”标头,那么他们将 得到修改后的文件?是这个主意吗?
      • 理论上是的。取决于这是否是“原始”提取,在这种情况下,他们会无条件地抓取文件,如果它仍然被缓存,等等......
      最近更新 更多