【问题标题】:What is the difference between no-cache and no-store in Cache-control?Cache-control 中的 no-cache 和 no-store 有什么区别?
【发布时间】:2011-11-26 06:21:53
【问题描述】:

我找不到Cache-Control:no-storeCache-Control:no-cache 之间的实际区别。

据我所知,no-store 表示不允许缓存设备缓存该响应。另一方面,no-cache 意味着不允许缓存设备在未先与源进行验证的情况下提供缓存响应。但是这个验证是关于什么的?条件获取?

如果响应包含no-cache,但没有Last-ModifiedETag,该怎么办?

问候。

【问题讨论】:

    标签: http caching http-caching


    【解决方案1】:

    【讨论】:

    【解决方案2】:

    但那检查是关于什么的?

    准确检查Last-ModifiedETag。客户端会询问服务器是否有使用这些标头的新版本数据,如果答案是否定的,它将提供缓存数据。


    更新

    来自RFC

    no-cache
        If the no-cache directive does not specify a field-name, then a cache MUST NOT use
     the response to satisfy a subsequent request without successful revalidation with the
     origin server. This allows an origin server to prevent caching even by caches that   
     have been configured to return stale responses to client requests. 
    

    【讨论】:

    • 如果缓存的响应既没有Last-Modified也没有ETag
    • 我认为在这种情况下响应根本不会被缓存。
    • 这就是我解释 RFC 的方式。 (添加了 sn-p)
    • 您能否更新您的报价以与此问题中的文字正确对齐?它有助于验证您到底在回复什么。
    【解决方案3】:

    正如您所指出的,无缓存并不意味着永远不会缓存,而是用户代理必须始终询问服务器是否可以使用它缓存的内容。相比之下,no-store 表示甚至不保留副本,这意味着没有什么可问的。如果您知道“我可以重复使用它吗?”的答案?总是不,您可以通过跳过缓存验证并在缓存中为其他数据节省空间来提高性能。

    除了性能之外,浏览器历史记录也存在行为差异。 HTTP 1.1 部分13.13 说“过期时间不适用于历史机制”。 no-cache 标头描述过期,因此不适用于诸如后退按钮之类的历史机制。因此,用户可以在不联系服务器的情况下向后导航到没有缓存的前一页。

    另一方面,no-store 标头可防止数据存储在会话之外,在这种情况下,它根本无法供历史机制使用。使用 no-store 时,如果用户通过导航到另一个域来结束其会话然后返回,浏览器知道要显示什么的唯一方法是再次从服务器获取初始页面。

    Chromium issue 对此主题的区别如下:

    no-cache 并不意味着“不缓存这个”(那将是 no-store)。 no-cache 表示不要将其用于正常加载,除非资源被重新验证以保持新鲜度。历史导航不是正常加载。

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多