代码之家  ›  专栏  ›  技术社区  ›  Justin Grant

更正HTTP响应头以在内容过期后导致304s

  •  7
  • Justin Grant  · 技术社区  · 14 年前

    我希望HTTP响应从现在起24小时后过期(这意味着浏览器在明天之前不会对该URL发出任何请求)。但是,如果请求在明天过期后重新发出,我想确保浏览器将发送正确的请求头,这样服务器将发送304,而不是强制客户端重新下载整个响应体(如果服务器上没有更改)。我希望304也能在24小时后过期。

    首先,这个场景可能吗?或者我必须在过期样式缓存和304样式缓存之间进行选择,但不能同时选择两者?如果可能的话,什么是正确的响应头(对于初始响应和后续的304s)将使它发生?

    如果像经常发生的那样,答案会根据浏览器类型/版本而有所不同,那么哪些头文件适用于哪些浏览器——哪些浏览器根本无法执行我想要的操作?我只对现在最常用的浏览器感兴趣(比如IE6+,FF3+,Chrome-latest,Safari-latest)?

    澄清

    更新: this SO question 这部分回答了我的问题。根据 RFC 2616 10.3.5 ,它说,我应该包括一个 Expires: Cache-Control: max-age

    然而,这个问题没有回答的是,这种符合RFC的方法是否适用于现有的流行浏览器,特别是IE6/7/8,它是标准遵从性的罪魁祸首,但是IE9、FF4+、最新的Chrome和最新的Safari也是我们的应用程序必须支持的。如果这些浏览器中有任何一个的行为不符合RFC的要求,那么有什么解决方法可以使用吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   EricLaw    13 年前

    ETAG 头,以便客户机可以发出有条件的HTTP请求,以便在响应的新鲜度生存期过期后重新验证响应。

    Cache-Control: max-age Expires 指令指定资源何时过期。

    Vary

    这些指令将在所有流行浏览器(IE6+、Firefox、Chrome)中工作,除了Windows上的Safari,它本身就缺乏跨多个会话工作的持久HTTP缓存。

    http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx 解释当无法提供正确的缓存头时会发生什么。

    Fiddler的缓存响应检查器将帮助您了解如何缓存给定的响应。

        2
  •  0
  •   Avi Flax    14 年前