最近在整理博客,发现了以前博客中 HTTP 缓存知识点与现在测试情况不一致,有点懵。
目前的测试环境:Mac 系统,Chrome 版本为 90.0.4430.93
前提条件,浏览器访问图片,响应头中已经包含了 Cache-Control 相关字段:
Cache-Control: public, max-age=31536000,
Etag: "FpdKIr7zIHAUeJ1AKNV6x422vsq9"
Last-Modified: Sat, 30 Mar 2019 08:26:52 GMT
1
3dwelcome 2021-05-01 00:45:39 +08:00
|
2
3dwelcome 2021-05-01 01:01:41 +08:00
我测试下来,其实就是 max-age 影响浏览器缓存策略的。
要想确保每次都有 If-Modified-Since,就只能让 max-age 时间尽可能的短,我都是干脆设置成 0 。 |
3
tabris17 2021-05-01 09:30:34 +08:00 via iPhone
以前 ctrl+f5 强制刷新,忽略本地缓存。现在还是不是不清楚
|
4
eason1874 2021-05-01 10:10:28 +08:00 1
缓存分两种,一种会检查内容更新的缓存,一种是不会检查的缓存。
你写的 Cache-Control: public, max-age=31536000 在一年内只要缓存资源有效都会直接使用,不检查更新。 Cache-Control: no-cache 和 Cache-Control: max-age=0 才会在使用缓存前检查内容更新。 检查更新又分两种,一种是 If-Modified-Since 检查时间,一种是 If-None-Match 检查 etag 标识符,如果支持 etag 则会使用 etag 从而忽略时间检查。 所以你改成 Cache-Control: no-cache 就能看到浏览器 304 通过 If-None-Match 检查,然后把 etag 关掉就能看到通过 If-Modified-Since 检查。 |