V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
justdoit123
V2EX  ›  科技

[ http 缓存] 为什么 Cache-Control 还需要 immutable 这个指令?

  •  
  •   justdoit123 · 157 天前 · 1554 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MDN 官方的说明:

    The immutable response directive indicates that the response will not be updated while it's fresh.

    Cache-Control: public, max-age=604800, immutable
    

    就像上面这段代码。在资源未过期的情况下,难道没有 immutable,浏览器在刷新的时候也会去 server 询问这个资源是否过期吗?

    Cache-control: max-age=604800 已经说明了这个资源是强缓存。在未过期的情况下,本来就不会再去 server 请求。

    所以,我不太理解为什么 Cache-Control 还需要 immutable 这个指令?

    感谢分享指正。

    8 条回复    2024-07-26 10:17:05 +08:00
    zy445566
        2
    zy445566  
       157 天前   ❤️ 1
    反正据我观察浏览器和浏览器的 iframe 和客户端表现都不一样

    在浏览器里面 max-age 还会看协商缓存 比如 etag 和 Last-Modified ,比如如果 etag 存在,有 max-age 还会请求服务器并发送客户端的 If-None-Match 值,如果服务器接受到 If-None-Match 一致则返回 304 ,返回体无内容,如果不一致就会返回 200 并将内容放在消息体返回。

    但是在浏览器的 iframe 和客户端就很奇怪,不会发送请求,我这边把谷歌浏览器的调试器连接到 iframe 和客户端的 web 里面都是显示返回头是 200 ,但是后面标志 from disk cache ,也就是压根没有请求服务端
    zy445566
        3
    zy445566  
       157 天前
    @zy445566 所以基于上面,如果在浏览器里面可能是存在 immutable 必要的
    tool2dx
        4
    tool2dx  
       157 天前   ❤️ 1
    @zy445566 浏览器地址栏手动输入 url 似乎不走缓存,只有 ajax/iframe 才走。
    sagaxu
        5
    sagaxu  
       157 天前
    在未过期的情况下,本来就不会再去 server 请求。

    那 304 是干嘛用的?
    justdoit123
        6
    justdoit123  
    OP
       157 天前
    @bxb100 感谢~ 这个 Q&A 说得很清楚。
    justdoit123
        7
    justdoit123  
    OP
       157 天前
    @sagaxu 你说的那是协商缓存吧? Expires 与 Cache-Control max-age=XXX 是强缓存。
    justdoit123
        8
    justdoit123  
    OP
       157 天前
    @zy445566
    @tool2dx

    先前实验下来的确有这个发现。浏览器对于当前 document 访问,是会忽略缓存相关的 Header 。即便我问的这个 `immutable` 也是会忽略的。

    iframe 确实没实验过。感谢分享!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1179 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:12 · PVG 02:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.