我有一个由用户生成的资源,因此会在不可预测的时间发生变化(例如,用户上传 Word 文档的新版本)。我希望浏览器缓存此资源,并在每次请求时使用服务器验证其缓存(即始终发送 If-Modified-Since header )。
通过测试,我发现当我在响应 header 中使用“Cache-Control: no-cache”时,Firefox 会正确处理此问题。但是,Internet Explorer 7 不会在其请求 header 中发送“If-Modified-Since”。
“Cache-Control: no-cache”是否达到了我在开头描述的效果?如果没有,我可以做些什么不同的事情来实现我在浏览器中所描述的目标?
谢谢。
最佳答案
根据 Microsoft ( http://support.microsoft.com/kb/234067 ) 的说法,您需要将 Expires header 设置为 -1,才能在 Internet Explorer 中正常工作。
来自页面:
In many cases, Web servers have one or more volatile pages on a server that contain information, which is subject to change immediately. These pages should be so marked by the server with a value of "-1" for the Expires header. On future requests by the user, Internet Explorer usually contacts the Web server for updates to that page via a conditional If-Modified-Since request.
我认为重点是,如果 IE 有过期日期,它就没有理由询问您资源是否已被修改,因为它的缓存副本应该“足够好”。
该页面还指出 IE 支持 Cache-control: no-cache,但不建议这样做。所以听起来它应该可以工作,但无论如何尝试一下 Expires 吧。
此外,其他谷歌搜索告诉我,浏览器通常会发送 If-Modified-Since,所以也许这就是 Firefox 工作的原因。尝试删除 Cache-Control: no-cache 以查看 Firefox 是否仍能正常运行。
关于HTTP 缓存 - 检查服务器,始终发送 If-Modified-Since,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917586/