HTTP缓存是Web性能优化的核心技术,它能显著减少网络请求,提升页面加载速度,并降低服务器负载。
一、缓存核心概念
1、缓存的价值
- 性能提升: 减少网络延迟,加快资源加载
- 带宽节省: 降低数据传输量
- 服务器减压: 减少重复请求处理
- 离线体验: 支持离线访问(Service Worker)
2、缓存位置
| 缓存类型 | 存储位置 | 生命周期 | 控制方式 |
|---|---|---|---|
| 浏览器缓存 | 客户端内存/磁盘 | 用户手动清除 | HTTP头部 |
| 代理缓存 | 中间服务器 | 配置决定 | 共享缓存指令 |
| 网关缓存 | 反向代理服务器 | 配置决定 | 服务器配置 |
| CDN缓存 | 边缘节点 | TTL设置 | CDN控制台 |
二、缓存控制机制
1、缓存控制头字段
| HTTP头 | 类型 | 功能说明 | 示例值 |
|---|---|---|---|
| Cache-Control | 请求/响应 | 主缓存控制指令 | max-age=3600, public |
| Expires | 响应 | 资源过期时间(HTTP/1.0) | Expires: Wed, 21 Oct 2025 07:28:00 GMT |
| ETag | 响应 | 资源版本标识符 | ETag: “33a64df551425fcc55e4d42a148795d9f25f89d4” |
| Last-Modified | 响应 | 资源最后修改时间 | Last-Modified: Tue, 15 Nov 2022 12:45:26 GMT |
| If-None-Match | 请求 | 携带ETag验证缓存 | If-None-Match: “33a64df5…” |
| If-Modified-Since | 请求 | 携带修改时间验证缓存 | If-Modified-Since: Tue, 15 Nov 2022 12:45:26 GMT |
| Vary | 响应 | 指定缓存变体 | Vary: User-Agent, Accept-Encoding |
2、Cache-Control 指令详解
| 指令 | 适用对象 | 说明 |
|---|---|---|
| max-age= | 响应 | 资源最大缓存时间(秒) |
| s-maxage= | 响应 | 共享缓存(如CDN)的最大缓存时间 |
| public | 响应 | 允许任何缓存存储响应 |
| private | 响应 | 仅允许浏览器缓存 |
| no-cache | 请求/响应 | 使用缓存前必须验证有效性 |
| no-store | 请求/响应 | 禁止存储任何缓存 |
| must-revalidate | 响应 | 过期后必须向源服务器验证 |
| immutable | 响应 | 资源永不变(适用于版本化资源) |
| stale-while-revalidate | 响应 | 允许使用过期缓存期间后台验证 |
三、缓存工作流程
1、强缓存(不发送请求)

2、协商缓存(发送验证请求)

四、缓存策略设计
1、静态资源缓存策略
# 版本化资源(永久缓存)
Cache-Control: public, max-age=31536000, immutable
# 非版本化资源(短期缓存)
Cache-Control: public, max-age=604800
2、动态内容缓存策略
# 个性化内容(不缓存)
Cache-Control: private, no-store
# 半动态内容(短期缓存)
Cache-Control: public, max-age=60, must-revalidate
3、缓存更新策略
| 策略 | 实现方式 | 适用场景 |
|---|---|---|
| 文件名指纹 | app.abc123.js | JS/CSS/图片等静态资源 |
| 查询参数版本 | style.css?v=20230101 |


2791

被折叠的 条评论
为什么被折叠?



