IE6和缓存机制

3

看起来IE6会忽略通过http头发送的任何缓存失效方式,我已经尝试将Pragma设置为No Cache并将Cache Expiration设置为当前时间,但在IE6中,点击“返回”按钮总是会拉取页面的缓存版本。

是否有IE6确实会关注的特定HTTP头?

6个回答

8

Cache-Control: private, max-age=0可以解决这个问题。在经典ASP中,可以使用Response.Expires=-1来实现。

请记住,在测试时,仅因为您的服务器关闭了缓存并不意味着浏览器会遵守它,当它有一个旧的缓存页面,并且被告知可以缓存该页面时,请清除缓存或使用F5强制重新加载页面。

此外,在服务器提供缓存内容的情况下,您可以使用Ctrl+F5来指示服务器不要从缓存中提供内容。


2
按下 F5 会导致 Pragma: no-cache 被添加到请求头中。Ctrl-F5 除了这个头之外,还会抑制 if-modified-since 和 if-none-match 头,因此删除了源服务器发送 304 Not Modified 响应的选项。Cache-Control 不会在请求头中发送。 - AnthonyWJones

1

你必须小心。如果你正在使用XMLHttpRequest(XHR)通过AJAX方式,那么ie6不会遵循头部中设置的缓存“推荐”。

解决方法是在用于AJAX请求的url查询中添加一个随机数。例如:

http://test.com?nonce=0123 

一个好的生成器是UTC()函数,它为用户的浏览器返回一个唯一的时间戳......除非他们改变他们的系统时钟。

0

你尝试过在头部设置ETag吗?它们是一种相当可靠的指示内容已更改的方式w3c规范 & 维基百科

除此之外,还有一种更加粗略的方法是向请求附加一个随机的查询字符串参数,例如当前的Unix时间戳。正如我所说,这很粗略,但IE6并不是最微妙的浏览器


0
一个小提示:通过经验我知道,即使通过Ctrl-F5强制重新加载页面,IE6也会从缓存中加载Javascript。因此,如果您正在处理Javascript,请始终清空缓存。
IE Web开发者工具栏可以极大地帮助解决这个问题。有一个清除缓存的按钮。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接