【问题标题】:chrome browser shows 200(from disk cache) only if etag and last-modified-date both are usedchrome 浏览器仅在使用 etag 和 last-modified-date 时才显示 200(来自磁盘缓存)
【发布时间】:2021-03-15 01:59:37
【问题描述】:

为什么只有在使用 etag 和 last-modified-date 时,chrome 浏览器才显示 200(来自磁盘缓存),而不是仅设置了 etag 响应标头? 注意:etag 生成已正确完成。 就我而言,我需要 etag 并且实际上并不需要最后修改日期

【问题讨论】:

    标签: caching etag request-headers last-modified response-headers


    【解决方案1】:

    TL;DR

    • 因为大多数浏览器会根据Last-Modified time [1] 在没有Cache-Control 或显式过期时间 时分配一个启发式过期时间。

    • 可以将Cache-Control: must-revalidate 标头添加到缓存控制 [2] 的响应中。


    [1]https://datatracker.ietf.org/doc/html/rfc7234#section-4.2.2

    如果响应具有 Last-Modified 标头字段(
    的第 2.2 节 [RFC7232]),鼓励缓存使用启发式过期值 这只是自那时以来间隔的一小部分。
    该分数的典型设置可能是 10%。

    [2]https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#revalidation_and_reloading

    【讨论】:

      【解决方案2】:

      TL;DR

      新MDN链接: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#up-to-date_contents_always

      对于动态生成的内容,或静态但经常更新的内容,您希望用户始终收到最新版本。

      如果您因为不打算缓存响应而没有添加 Cache-Control 标头,则可能会导致意外结果。缓存存储允许启发式地缓存它——因此,如果您对缓存有任何要求,您应该始终在 Cache-Control 标头中明确指出它们。

      在响应中添加 no-cache 会导致服务器重新验证,因此您可以每次都提供新的响应 - 或者如果客户端已经有新的响应,则只需响应 304 Not Modified。

      【讨论】:

        猜你喜欢
        • 2011-08-16
        • 2018-01-11
        • 2016-08-08
        • 1970-01-01
        • 2012-11-22
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多