← 返回目录

第 1 卷

第 1 / 10 卷日期:

浏览器缓存核心面试题全解析

浏览器缓存核心面试题(全解析)

1. 浏览器缓存的工作原理

浏览器缓存是浏览器对已请求过的资源进行本地存储,当再次请求该资源时,优先从本地读取而非重新从服务器下载,以此减少网络请求、降低服务器压力、提升页面加载速度的机制。

完整工作流程
  1. 首次请求:浏览器向服务器发起请求 → 服务器返回资源+缓存相关HTTP响应头 → 浏览器下载资

源,同时将资源内容+缓存规则存入本地缓存(磁盘/内存)。

  1. 再次请求:浏览器先判断本地是否有该资源的缓存,且缓存是否有效:

◦ ✅ 缓存有效:直接读取本地缓存(强缓存),不发起网络请求,状态码 200 OK (from

disk cache/memory cache)。

◦ ❌ 缓存失效:发起条件请求到服务器,服务器根据资源标识判断资源是否更新:

▪ 资源未更新:返回 304 Not Modified,无资源体,浏览器复用本地缓存(协商缓

存)。

  • 资源已更新:返回 200 OK +新资源,浏览器更新本地缓存后使用。
缓存存储位置(优先级从高到低)

• Memory Cache(内存缓存):速度最快,生命周期随浏览器标签页关闭而消失,存储小体积、高

频使用的资源(如JS/CSS)。

• Disk Cache(磁盘缓存):速度稍慢,持久化存储,关闭浏览器后仍存在,存储大体积、低频使用

的资源(如图片/视频)。

• Service Worker Cache:独立于浏览器的缓存,可自定义缓存规则,支持离线访问(PWA核

心)。

2. HTTP头中与缓存策略相关的字段

HTTP缓存分为响应头(服务器设置,核心)和请求头(浏览器发起条件请求时携带)两类,核心字段如下:

If-Modified-Since、 If-None-Match、 Cache-Control(请求时的缓存指令)

✅ 辅助/禁用缓存字段

Pragma(兼容HTTP1.0,优先级最高)、 no-cache / no-store(Cache-Control子指令)

3. 核心缓存HTTP头字段的作用(Cache-Control/Expires/Last-

Modified/ETag)

🔹 1. Cache-Control(HTTP1.1核心,优先级最高)

作用:精准定义资源的缓存策略,是强缓存的核心字段,支持多指令组合,覆盖Expires的缺陷(时间戳依赖客户端本地时间)。

格式: Cache-Control: [指令1],[指令2]

核心指令(强缓存相关)

• max-age=xxx:最常用,单位秒,表示资源从服务器返回后,在 xxx 秒内缓存有效,浏览器直

接使用本地缓存(强缓存)。

  • 示例: Cache-Control: max-age=3600 → 资源1小时内有效。
  • public:资源可被浏览器+中间代理服务器缓存(如CDN),默认静态资源为public。
  • private:资源仅能被浏览器缓存,代理服务器不可缓存(如用户个人数据接口)。

• immutable:资源在 max-age 有效期内绝对不变,浏览器即使刷新页面也不会发起协商请

求,强制使用强缓存(适合静态资源如图片/字体)。

核心指令(禁用/协商缓存相关)

• no-cache:不是禁用缓存,而是禁用强缓存,每次请求必须发起协商缓存(向服务器验证资源

是否更新)。

• no-store:完全禁用缓存,浏览器不存储资源,每次请求都重新下载(适合敏感数据如支付页

面)。

• must-revalidate:缓存过期后,必须向服务器验证,不可使用过期缓存(防止代理返回过期

资源)。

HTTP1.1的 Cache-Control: max-age 替代,共存时max-age优先级更高。

🔹 3. Last-Modified(HTTP1.0,协商缓存核心)

作用:服务器返回资源的最后修改时间戳(GMT格式),作为资源的更新标识,用于协商缓存。

  • 工作流程:
  1. 首次请求:服务器返回 Last-Modified: Wed, 01 Jan 2026 08:00:00 GMT + 资源。
  2. 缓存失效后:浏览器发起请求时,携带请求头 If-Modified-Since: [Last-Modified的

值],向服务器验证。

  1. 服务器判断:对比资源当前最后修改时间与 If-Modified-Since:
  • 未修改:返回 304 Not Modified,无资源体。
  • 已修改:返回 200 OK +新资源+新的 Last-Modified。

缺陷:

  • 精度低:仅到秒级,若资源1秒内多次修改,无法识别。
  • 误判:资源内容未变,仅修改文件名称/权限,最后修改时间会更新,导致不必要的重新下载。
🔹 4. ETag(HTTP1.1,协商缓存,优先级高于Last-Modified)

作用:服务器为资源生成的唯一标识(通常是资源内容的哈希值,如MD5/SHA1),内容变则ETag 变,精准标识资源是否更新,解决Last-Modified的缺陷。

  • 工作流程:
  1. 首次请求:服务器返回 ETag: "abc123def" + 资源。
  2. 缓存失效后:浏览器发起请求时,携带请求头 If-None-Match: [ETag的值],向服务器验

证。

  1. 服务器判断:对比资源当前ETag与 If-None-Match:
  • 一致(未更新):返回 304 Not Modified。
  • 不一致(已更新):返回 200 OK +新资源+新的 ETag。

ETag vs Last-Modified

  • ✅ ETag优势:精度高(到字节级)、无时间戳依赖、可识别内容未变但属性变更的场景。

• ✅ 共存策略:服务器同时返回ETag和Last-Modified,浏览器优先使用 If-None-Match 发起协

商请求,服务器优先验证ETag。

全站分卷索引 · 10 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷