gpt4 book ai didi

internet-explorer - 使 IE 缓存资源但始终重新验证

转载 作者:行者123 更新时间:2023-12-04 07:23:34 26 4
gpt4 key购买 nike

缓存控制 header “no-cache、must-revalidate、private”允许浏览器缓存资源,但强制使用条件请求重新验证。这在 FF、Safari 和 Chrome 中按预期工作。

但是,IE7+8 不会发送条件请求,即请求头中缺少“If-Modified-Since”,因此服务器使用 HTTP/200 而非 HTTP/304 进行响应。

以下是完整的服务器响应 header :

Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Content-type: text/html;charset=utf-8
Content-Length: 10835
Date: Wed, 16 Feb 2011 13:52:26 GMT
Connection: keep-alive
Cache-Control: no-cache, must-revalidate, private

这似乎是一个 IE 错误,但我在网上没有找到任何相关内容,所以我想知道是否可能缺少或存在另一个标题使 IE 表现异常?

关于 no-cache 和 max-age 之间区别的一个很好的讨论: What's the difference between Cache-Control: max-age=0 and no-cache?

最佳答案

我终于想通了。这是一个解释和一个经过测试的解决方案。

以下网站证实了我的观察:http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

它说 IE 不会在本地存储带有“no-cache”指令的页面,因此总是发送无条件请求。

还有一篇 MS 支持文章 - https://support.microsoft.com/help/234067/ - 这证实了这一点:

“Internet Explorer 支持 HTTP 1.1 Cache-Control header ,当指定了 no-cache 值时,它会阻止对特定 Web 资源的所有缓存......”

这种行为并非完全错误——但这不是 RFC 2616(第 14.9.1 节)的意图。关于“无缓存”,它说“......缓存不得使用响应来满足后续请求,而无需与源服务器成功重新验证。”所以响应可以被缓存,但必须重新验证它。除了 IE 之外,主流浏览器都会缓存响应并重新验证它。为了防止存储请求,有“no-store”缓存控制指令。

总之,IE 将“无缓存”视为“无存储”。

这是为 IE 和其他浏览器启用条件请求的解决方案 以一致的方式:

不要使用 no-cache,而是将 Expires header 设置为过去(或 -1,具有相同的效果)。 IE 以及其他主要浏览器将发送条件请求。 (注意,您还应该注意 IE Vary header 错误,它会阻止缓存。)

这些是关键的 header 字段:

Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Expires: -1
Cache-Control: must-revalidate, private
  • 需要 Last-Modified(或 ETag)作为验证器
  • Expires -1 表示资源已过时,必须重新验证
  • Cache-Control 不得包含 no-cache 或 no-store
  • 关于internet-explorer - 使 IE 缓存资源但始终重新验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017454/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com