我读到的关于“过期”标题的所有内容(http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/,例如)表明在利用缓存时通过这种方式,您需要“指纹”您的文件名,这样当静态资产发生变化时,浏览器将停止使用缓存中的版本,而是获取新版本。
但是,在我使用IIS7作为后端网络服务器并使用IE 7,FF和Chrome浏览器的测试中,我不需要这样做。如果我更改了网络服务器上的文件 - 类似于“myfile.js”,那么网络服务器就会发送“最后修改过的”标题作为该文件的修改日期,并且浏览器都会接受该更改。在更改文件后,他们为第一个请求返回了200,后续请求似乎从缓存中提取。
所以我肯定错过了一些东西,但我不知道它是什么。请赐教。
答案 0 :(得分:3)
您的测试存在缺陷。您很可能会重新加入"重新加载"按钮,但这不是用户通常加载您的网站的方式 - 而是他们点击链接,点击书签,键入URL等。有些人点击重新加载,但它只是一个非常小的百分比。
当您点击重新加载时,您强制浏览器发送If-Modified-Since请求。如果你有一个遥远的未来Expires日期并以典型的方式加载页面,你会发现浏览器没有对该资源发出任何HTTP请求 - 这很好!
有关详细信息,请参阅此博客文章(第4段):http://www.stevesouders.com/blog/2011/06/27/unexpected-reloads-in-webkit/
答案 1 :(得分:1)
现代浏览器仍会尝试从服务器获取任何请求的URL,但在请求中包含“If-Modified-Since”时间戳。服务器可以使用它来确定它是否应该发回200 OK以及所请求的URL的内容,或者304 Not Modifed响应以指示浏览器应该使用缓存版本。
expires标题基本上只是告诉浏览器“在这个时间点之后,你应该删除你的缓存版本并获取一个新的副本”。