我有一个资源是用户生成的,因此在不可预测的时间更改(例如,用户上载了word文档的新版本)。我希望浏览器缓存此资源,并在每次请求时与服务器验证其缓存(即始终发送If-Modified- send报头)。
通过测试,我发现当我在响应头中使用"Cache-Control: no-cache“时,Firefox可以正确地处理这个问题。但是,Internet Explorer 7不会在其请求报头中发送"If-Modified-Since“。
"Cache-Control: no-cache“实现了我在开头描述的内容吗?如果没有,有没有什么我可以做的不同的事情来实现我在不同浏览器中描述的东西?
谢谢。
发布于 2009-12-17 05:20:43
根据微软(http://support.microsoft.com/kb/234067)的说法,你需要将Expires头设置为-1,这样才能在Internet Explorer中正常工作。
在该页面中:
在许多情况下,Web服务器在服务器上有一个或多个包含信息的易失性页面,这些信息可能会立即发生变化。服务器应使用Expires标头的值"-1“对这些页面进行标记。对于用户将来的请求,Internet Explorer通常通过有条件的If-Modified-Since请求与Web服务器联系以更新该页。
我认为关键在于,如果IE有一个到期日期,它就没有理由问你资源是否被修改了,因为它的缓存副本应该是“足够好的”。
该页面还说IE支持Cache-control: no-cache,尽管不推荐这样做。因此,听起来它应该可以工作,但不管怎样,尝试Expires的事情。
另外,其他谷歌搜索告诉我,浏览器通常会发送If-Modified- send,所以也许这就是Firefox工作的原因。尝试删除Cache-Control: no-cache,看看Firefox是否仍然正常运行。
https://stackoverflow.com/questions/1917586
复制相似问题