简述Expires和Cache-Control

348 阅读3分钟

简述Expires和Cache-Control

ExpiresCache-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) 特点

  • 相对时间:基于请求时间,不受客户端和服务器时间不同步的影响。

  • 灵活性:支持多种缓存策略。

  • 优先级:如果同时设置 ExpiresCache-ControlCache-Control 优先级更高。

HTTP/1.1 200 OK
Content-Type: text/html
Cache-Control: max-age=3600, public

3. Expires 和 Cache-Control 的区别

特性ExpiresCache-Control
时间类型绝对时间(GMT 格式)相对时间(秒)
优先级
灵活性单一,仅支持设置过期时间灵活,支持多种缓存策略
兼容性所有浏览器现代浏览器

4. 最佳实践

(1) 静态资源

  • 使用 Cache-Control: max-age=<seconds> 设置较长的缓存时间。

  • 结合文件哈希或版本号,确保资源更新后客户端能获取最新版本。

(2) 动态资源

  • 使用 Cache-Control: no-cachemust-revalidate,确保每次请求都验证缓存有效性。

(3) 敏感数据

  • 使用 Cache-Control: no-store,禁止缓存敏感数据。

总结

  • Expires:基于绝对时间,简单但不够灵活。

  • Cache-Control:基于相对时间,灵活且功能强大。

在现代 Web 开发中,Cache-Control 是更推荐的方式,结合 max-ageno-cache 等指令,可以更精确地控制缓存行为,提升页面性能和用户体验。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github