|
这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在 Web 性能优化中,HTTP 缓存是最直接且有效的加速手段之一。合理配置 Cache-Control 头部不仅可以减少回源请求,降低服务器负载,还能显著提升用户访问体验。本文将全面介绍 Cache-Control 的概念、常用指令、使用场景及最佳实践。
一、什么是 Cache-Control
Cache-Control 是 HTTP/1.1 定义的通用首部字段,用于指定请求和响应的缓存机制。它替代了早期的 Expires 头,提供了更灵活和精细的缓存控制能力。
在响应头中,Cache-Control 告诉客户端(浏览器)或中间代理(如 CDN)如何缓存内容,以及缓存多久;在请求头中,则可告知服务器和中间代理客户端的缓存需求。
二、常见指令解析
1. 缓存时长相关
max-age=[秒数]
指定资源在缓存中的最大有效时间,单位为秒。例如:
- Cache-Control: max-age=3600
复制代码 表示缓存 3600 秒(1 小时)后即视为过期。
s-maxage=[秒数]
专用于共享缓存(如 CDN、代理服务器),覆盖 max-age 指令。例如:
- Cache-Control: s-maxage=600, max-age=60
复制代码 表示 CDN 缓存 600 秒,浏览器缓存 60 秒。
2. 缓存可公开或私有
指资源可以被任何缓存(包括中间代理)缓存,即使需要 HTTP 认证也可以缓存。
指资源只针对单个用户缓存,代理服务器不能缓存。如用户个人信息页返回:
- Cache-Control: private, max-age=0, no-cache
复制代码 3. 禁止缓存或强制重新验证
不代表“完全不缓存”,而是指缓存副本必须先向源服务器进行验证(例如 If-Modified-Since 或 If-None-Match)后,才能返回给客户端。
表示绝对不允许缓存,浏览器和中间缓存都不能保存请求或响应的任何部分,常用于敏感数据。
一旦过期,必须向服务器验证缓存内容的有效性,不能使用过期缓存。
与 must-revalidate 类似,但只针对共享缓存。
4. immutable(Firefox 和 Chrome 支持)
表示资源永远不会改变,不需要重新验证,用于版本化静态文件:
- Cache-Control: max-age=31536000, immutable
复制代码 三、示例配置
静态文件(如 CSS/JS)
版本化文件:
- Cache-Control: public, max-age=31536000, immutable
复制代码 解释:可公开缓存一年,且文件名带版本哈希,不会改变,可使用 immutable 减少重新验证。
动态 HTML 页面
如频繁更新的首页:
- Cache-Control: no-cache, must-revalidate
复制代码 解释:可在缓存,但每次使用前都需重新验证。
用户敏感信息
用户个人资料页:
- Cache-Control: private, no-store
复制代码 解释:仅用户自己缓存,但推荐不缓存任何内容。
四、与 Expires 的关系
- Expires 为 HTTP/1.0 规范,通过绝对时间(GMT)指定过期时间。
- Cache-Control 为 HTTP/1.1,使用相对时间(max-age),优先级高于 Expires。
现代实践推荐只使用 Cache-Control,除非需要兼容古老客户端。
五、最佳实践
避免用户访问到旧缓存文件。
- 动态内容设置 no-cache 或短 max-age
保证内容及时更新。
防止缓存泄露用户隐私。
- 配合 ETag 或 Last-Modified 使用
在 no-cache 场景下节省带宽,只返回 304 响应。
对 CDN 配置较长 s-maxage,浏览器使用短 max-age,兼顾更新与访问性能。
六、总结
Cache-Control 是 Web 优化的核心配置之一,理解其每个指令的含义与作用,才能根据不同业务场景设计最优缓存策略,既提升用户体验,又节省服务器资源。
|
|