按 [MDN]( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) 官方的说明:

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

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

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

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

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

感谢分享指正。
举报· 72 次点击
登录 注册 站外分享
4 条回复  
bxb100 小成 2024-7-26 08:56:52
https://stackoferflow.com/questions/61050144/cache-control-immutable-header

https://httpwg.org/specs/rfc8246.html

https://caniuse.com/mdn-http_headers_cache-control_immutable
zy445566 初学 2024-7-26 09:08:17
反正据我观察浏览器和浏览器的 iframe 和客户端表现都不一样

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

但是在浏览器的 iframe 和客户端就很奇怪,不会发送请求,我这边把谷歌浏览器的调试器连接到 iframe 和客户端的 web 里面都是显示返回头是 200 ,但是后面标志 from disk cache ,也就是压根没有请求服务端
tool2dx 初学 2024-7-26 09:14:57
@zy445566 浏览器地址栏手动输入 url 似乎不走缓存,只有 ajax/iframe 才走。
sagaxu 初学 2024-7-26 09:46:26
在未过期的情况下,本来就不会再去 serfer 请求。

那 304 是干嘛用的?
返回顶部