简述Expires和Cache-Control
Expires 和 Cache-Control 是 HTTP 响应头中用于控制浏览器缓存行为的两个重要字段。它们的主要作用是减少重复请求,提升页面加载速度。以下是它们的详细解析:
1. Expires
(1) 定义
-
Expires 是一个 HTTP 响应头字段,用于指定资源的过期时间。
-
浏览器在过期时间之前会直接从缓存中加载资源,而不会向服务器发送请求。
(2) 语法
Expires: <http-date>
<http-date>是一个 GMT 格式的时间字符串,例如:
Expires: Wed, 21 Oct 2023 07:28:00 GMT
(3) 特点
-
绝对时间:基于服务器时间,容易因客户端和服务器时间不同步导致问题。
-
兼容性:所有浏览器都支持。
-
局限性:无法处理动态资源或需要频繁更新的资源。
HTTP/1.1 200 OK
Content-Type: text/html
Expires: Wed, 21 Oct 2023 07:28:00 GMT
2. Cache-Control
(1) 定义
-
Cache-Control 是一个 HTTP 响应头字段,用于更灵活地控制缓存行为。
-
支持多种指令,可以精确控制缓存策略。
(2) 常用指令
| 指令 | 描述 |
|---|---|
max-age=<seconds> | 资源的最大缓存时间(秒) |
| no-cache | 强制向服务器验证缓存是否有效 |
| no-store | 禁止缓存,每次请求都从服务器获取资源 |
| public | 资源可以被任何缓存(如 CDN)缓存 |
| private | 资源只能被客户端缓存 |
| must-revalidate | 缓存过期后必须向服务器验证 |
(3) 语法
Cache-Control: <directive>[, <directive>]*
Cache-Control: max-age=3600, public
(4) 特点
-
相对时间:基于请求时间,不受客户端和服务器时间不同步的影响。
-
灵活性:支持多种缓存策略。
-
优先级:如果同时设置
Expires和Cache-Control,Cache-Control优先级更高。
HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: max-age=3600, public
3. Expires 和 Cache-Control 的区别
| 特性 | Expires | Cache-Control |
|---|---|---|
| 时间类型 | 绝对时间(GMT 格式) | 相对时间(秒) |
| 优先级 | 低 | 高 |
| 灵活性 | 单一,仅支持设置过期时间 | 灵活,支持多种缓存策略 |
| 兼容性 | 所有浏览器 | 现代浏览器 |
4. 最佳实践
(1) 静态资源
-
使用
Cache-Control: max-age=<seconds>设置较长的缓存时间。 -
结合文件哈希或版本号,确保资源更新后客户端能获取最新版本。
(2) 动态资源
- 使用
Cache-Control: no-cache或must-revalidate,确保每次请求都验证缓存有效性。
(3) 敏感数据
- 使用
Cache-Control: no-store,禁止缓存敏感数据。
总结
-
Expires:基于绝对时间,简单但不够灵活。
-
Cache-Control:基于相对时间,灵活且功能强大。
在现代 Web 开发中,Cache-Control 是更推荐的方式,结合 max-age、no-cache 等指令,可以更精确地控制缓存行为,提升页面性能和用户体验。
更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github