【问题标题】:What is the difference between max-age=0 and max-age=-1 in Cache Control?缓存控制中的 max-age=0 和 max-age=-1 有什么区别?
【发布时间】:2018-05-08 07:04:25
【问题描述】:

Cache-control: max-age=0Cache-control: max-age=-1 两个标头之间的浏览器行为有何不同?

如果浏览器接收到 max-age=0,它会立即重新验证缓存。 如果浏览器接收到 max-age=10,它将在 10 秒后重新验证缓存。 max-age=-1 的浏览器行为是什么?和 max-age=0 一样吗?如果是,为什么我们需要两者?

【问题讨论】:

    标签: http caching cache-control max-age


    【解决方案1】:

    来自https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

    最大年龄 当通过 max-age=0 指令强制中间缓存重新验证其自己的缓存条目,并且客户端在请求中提供了自己的验证器时,提供的验证器可能与当前存储在缓存中的验证器不同入口。在这种情况下,缓存可以使用任一验证器来发出自己的请求,而不会影响语义透明度。 但是,验证器的选择可能会影响性能。最好的方法是让中间缓存在发出请求时使用自己的验证器。如果服务器回复 304(未修改),则缓存可以将其现在已验证的副本以 200(OK)响应返回给客户端。但是,如果服务器使用新的实体和缓存验证器进行回复,则中间缓存可以使用强比较功能将返回的验证器与客户端请求中提供的验证器进行比较。如果客户端的验证器等于源服务器的验证器,则中间缓存仅返回 304(未修改)。否则,它会返回带有 200(OK)响应的新实体。

    来自https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age

    增量秒 结果可以被缓存的最大秒数。 Firefox 将其设置为 24 小时(86400 秒),Chromium 设置为 10 分钟(600 秒)。 Chromium 还指定了 5 秒的默认值。 值 -1 将禁用缓存,需要对所有调用进行预检 OPTIONS 检查。

    【讨论】:

      【解决方案2】:

      max-age 接受与delta-seconds 匹配的参数:

      The delta-seconds rule specifies a non-negative integer, representing
      time in seconds.
      
        delta-seconds  = 1*DIGIT
      

      max-age=-1 因此不是一个有效的指令,规范也没有定义解释。规范建议:

      Caches are
      encouraged to consider responses that have invalid freshness
      information to be stale.
      

      【讨论】:

        猜你喜欢
        • 2017-07-16
        • 2011-02-25
        • 2016-05-08
        • 2018-03-11
        • 2020-12-19
        • 2015-12-04
        • 2012-11-21
        • 2012-12-02
        • 1970-01-01
        相关资源
        最近更新 更多