面试题之强缓存协商缓存

发布于:2025-03-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

以下是关于强缓存和协商缓存的面试题总结:


1. 强缓存和协商缓存的定义

  • 强缓存:当浏览器请求资源时,直接从本地缓存中获取资源,而无需向服务器发送请求。强缓存的实现主要依赖于 HTTP 响应头中的 Cache-ControlExpires 字段。
  • 协商缓存:当强缓存失效后,浏览器会向服务器发送请求,携带缓存标识(如 Last-ModifiedETag),服务器根据这些标识判断资源是否发生变化。如果资源未变化,服务器返回 304 Not Modified 状态码,浏览器继续使用本地缓存。

2. 强缓存和协商缓存的实现方式

  • 强缓存
    • Expires:HTTP 1.0 中的字段,指定资源的绝对过期时间。
    • Cache-Control:HTTP 1.1 中的字段,提供了更灵活的缓存策略,如 max-age(缓存有效期)、no-cache(不直接使用强缓存,需协商验证)、no-store(不使用缓存)。
  • 协商缓存
    • Last-ModifiedIf-Modified-Since:服务器返回资源的最后修改时间,浏览器在后续请求中携带该时间戳进行验证。
    • ETagIf-None-Match:服务器返回资源的唯一标识符,浏览器在后续请求中携带该标识符进行验证。

3. 强缓存和协商缓存的区别

  • 请求过程
    • 强缓存:直接从本地缓存获取资源,不发送请求。
    • 协商缓存:需要向服务器发送请求,由服务器决定是否使用缓存。
  • 适用场景
    • 强缓存适用于静态资源(如图片、CSS、JS 文件),这些资源不经常更新。
    • 协商缓存适用于动态资源或更新频繁的资源,能够及时获取最新内容。
  • 响应状态码
    • 强缓存生效时,响应状态码为 200(直接使用缓存)。
    • 协商缓存生效时,响应状态码为 304 Not Modified

4. 强缓存和协商缓存的优先级

  • 强缓存的优先级高于协商缓存。如果强缓存生效,浏览器不会发送请求到服务器;如果强缓存失效,才会进入协商缓存阶段。

5. 如何设置强缓存和协商缓存

  • 强缓存
    • Cache-Control: max-age=3600(资源缓存有效期为 1 小时)。
    • Expires: Wed, 21 Jul 2023 17:00:00 GMT(资源过期时间为指定时间)。
  • 协商缓存
    • 服务器响应头设置 Last-ModifiedETag
    • 浏览器请求头携带 If-Modified-SinceIf-None-Match

6. 注意事项

  • 强缓存:如果服务器时间设置不准确,可能导致缓存失效。
  • 协商缓存:虽然需要与服务器通信,但减少了不必要的数据传输。

掌握这些知识点可以帮助你在面试中更好地回答关于 HTTP 缓存机制的问题。