| 类别 | 内容 |
|---|---|
| 缓存类型 | 强缓存 |
| - Cache-Control:通过设置缓存指令控制资源的有效期。 | |
- max-age=<seconds>:指定资源在缓存中可存活的时间。 | |
- no-cache:强制在使用缓存前向服务器验证。 | |
- no-store:不缓存任何内容。 | |
| - Expires:指定资源的过期时间,通常为具体的日期和时间。 | |
| 协商缓存 | |
| - 过期后通过与服务器协商决定是否使用缓存。 | |
- Last-Modified:记录资源最后修改时间,浏览器通过 If-Modified-Since 请求判断资源是否有更新。 | |
- ETag:服务器生成的资源唯一标识符,浏览器通过 If-None-Match 请求判断资源是否有变化。 | |
| 缓存流程 | 1. 首次请求:浏览器请求资源并存储服务器响应的缓存信息。 |
| 2. 后续请求: | |
| - 强缓存:如果缓存未过期,直接使用缓存的资源,避免网络请求。 | |
| - 协商缓存:如果缓存已过期,发送请求并包含相关缓存信息,服务器根据信息判断资源是否有变化。 | |
| 缓存控制策略 | - 避免缓存:使用 Cache-Control: no-store 或 no-cache 来阻止缓存。 |
- 版本管理:通过更改文件名(如 style.v1.css)来确保用户请求到最新的资源。 | |
| - 分级缓存:结合浏览器缓存、CDN 缓存和服务器缓存来优化资源加载效率。 | |
| 清理和更新 | - 缓存清理:根据存储限制、用户行为(如手动清除缓存)或设置的过期时间自动清理缓存。 |
| - 更新缓存:开发者可以通过更新资源的 URL 或合理设置缓存策略来确保用户获取最新的资源。 |
浏览器的缓存机制是为了提高网页加载速度、减少服务器负担和提升用户体验而设计的一种策略。浏览器缓存通过存储静态资源(如 HTML、CSS、JavaScript、图片等)的副本,避免每次加载网页时都从服务器获取资源。以下是浏览器缓存机制的基本原理和实现方式:
1. 缓存类型
-
强缓存:
- 浏览器在指定的有效期内使用缓存的资源,而不向服务器发送请求。
- 主要通过 HTTP 响应头中的
Cache-Control和Expires字段来控制。 - Cache-Control:支持多种指令,如
max-age、no-cache、no-store等。max-age=3600:资源在缓存中可存活 1 小时。no-cache:在使用缓存前,必须向服务器验证。no-store:不缓存任何内容。
- Expires:过期时间,通常为具体的日期时间。
-
协商缓存:
- 当缓存过期后,浏览器向服务器发送请求,并根据服务器的响应来决定是否使用缓存。
- 主要通过
Last-Modified和ETag两个 HTTP 头部来实现。 - Last-Modified:服务器在响应中返回资源的最后修改时间,浏览器在后续请求中使用
If-Modified-Since头部询问资源是否有更新。 - ETag:服务器生成资源的唯一标识符,浏览器在后续请求中使用
If-None-Match头部询问资源是否有变化。
2. 缓存流程
-
首次请求:
- 当用户首次请求某个资源时,浏览器会向服务器发送请求。
- 服务器响应时会携带缓存相关的 HTTP 头信息(如
Cache-Control、Expires、Last-Modified、ETag等)。 - 浏览器根据响应内容将资源存储在缓存中。
-
后续请求:
- 当用户再次请求同一资源时,浏览器首先检查缓存中是否有该资源。
- 强缓存:
- 如果资源在缓存中且未过期,浏览器直接使用缓存的资源,避免网络请求。
- 协商缓存:
- 如果资源已过期,浏览器将向服务器发送请求,包括相关的缓存信息(如
If-Modified-Since或If-None-Match)。 - 服务器根据这些信息判断资源是否有变化,返回相应的状态码(如 304 Not Modified)和资源。
- 如果资源已过期,浏览器将向服务器发送请求,包括相关的缓存信息(如
3. 缓存控制策略
-
避免缓存:
- 对于不希望被缓存的资源,可以使用
Cache-Control: no-store或no-cache。
- 对于不希望被缓存的资源,可以使用
-
版本管理:
- 使用文件名版本(如
style.v1.css),确保每次更新资源时都能请求到最新版本,避免旧缓存的影响。
- 使用文件名版本(如
-
分级缓存:
- 浏览器缓存、CDN 缓存和服务器缓存等多层次缓存机制协同工作,进一步提高加载速度。
4. 清理和更新缓存
- 缓存清理:
- 浏览器会根据存储限制、用户行为(如清理缓存)或开发者指定的过期时间自动清理缓存。
- 更新缓存:
- 开发者可以通过更新资源的 URL 或设置合理的缓存策略,确保用户能够及时获得最新的资源。
5. 总结
浏览器的缓存机制通过强缓存和协商缓存来优化网页资源的加载过程,从而提升用户体验和减少服务器负担。理解并合理配置缓存策略可以显著改善前端性能。