HTTP 缓存 - 与服务器检查,始终发送 If-Modified-Since

Posted

技术标签:

【中文标题】HTTP 缓存 - 与服务器检查,始终发送 If-Modified-Since【英文标题】:HTTP Cache - check with the server, always sending If-Modified-Since 【发布时间】:2010-12-27 10:01:36 【问题描述】:

我有一个用户生成的资源,因此会在不可预知的时间发生变化(例如,用户上传了新版本的 Word 文档)。我希望浏览器缓存此资源并在每次请求时通过服务器验证其缓存(即始终发送 If-Modified-Since 标头)。

通过测试,我发现当我在响应标头中使用“Cache-Control: no-cache”时,Firefox 可以适当地处理这个问题。但是,Internet Explorer 7 并未在其请求标头中发送“If-Modified-Since”。

“Cache-Control: no-cache”是否实现了我开始描述的内容?如果没有,我可以做些什么不同的事情来实现我在浏览器中描述的内容?

谢谢。

【问题讨论】:

【参考方案1】:

根据 Microsoft (http://support.microsoft.com/kb/234067) 的说法,您需要将 Expires 标头设置为 -1 才能在 Internet Explorer 中正常工作。

从页面:

在许多情况下,Web 服务器有一个或 服务器上更易变的页面 包含信息,这是主题 立即改变。这些页面 应该由服务器标记为 Expires 的值为“-1” 标题。关于未来的请求 用户,通常是 Internet Explorer 联系 Web 服务器以获取更新 该页面通过条件 If-Modified-Since 请求。

我认为关键是,如果 IE 有过期日期,它认为没有理由询问您资源是否已被修改,因为它的缓存副本应该“足够好”。

该页面还说 IE 支持 Cache-control: no-cache,但不建议这样做。所以听起来它应该可以工作,但无论如何都要试试 Expires 的东西。

此外,其他谷歌搜索告诉我,浏览器通常会发送 If-Modified-Since,所以也许这就是 Firefox 工作的原因。尝试删除 Cache-Control: no-cache 以查看 Firefox 是否仍然正常运行。

【讨论】:

看起来像个赢家。当我阅读 RFC (ietf.org/rfc/rfc2616.txt) 时,我正沿着 Expires 的方向前进。感谢您的回答!

以上是关于HTTP 缓存 - 与服务器检查,始终发送 If-Modified-Since的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 缓存

初始 FBSession 检查始终失败

http 条件请求

通过HTTP Header控制缓存

浏览器缓存

通过HTTP Header控制缓存