---
title: "HTTP 缓存策略:Cache-Control、ETag 与 stale-while-revalidate"
keywords:
- Cache-Control
- ETag
- Last-Modified
- stale-while-revalidate
- must-revalidate
- immutable
description: "系统梳理 HTTP 缓存的核心指令与校验机制,解释 stale-while-revalidate 的使用场景,并给出实践建议与可验证来源。"
categories:
- 文章资讯
- 技术教程
---
概述
HTTP 缓存通过到期(max-age/immutable)与校验(ETag/Last-Modified)配合,减少不必要请求与带宽消耗。stale-while-revalidate 可以在后端刷新期间继续提供过期副本,提高可用性与性能。
关键指令与校验
Cache-Control: max-age=31536000, immutable:对版本化静态资源长期缓存,避免频繁校验[参考1,5]。Cache-Control: no-cache与no-store:前者允许缓存但每次使用需校验;后者禁止存储[参考1,5]。ETag与Last-Modified:校验缓存有效性,触发条件请求(If-None-Match/If-Modified-Since),降低重传成本[参考1,2]。stale-while-revalidate:允许在后台重新验证期间继续使用过期副本,提升用户体验[参考2,5,3]。must-revalidate:资源过期后必须与源站重新验证,防止断网时使用陈旧副本[参考5]。
落地建议
- 版本化静态资源启用长缓存与
immutable;动态接口结合ETag/Last-Modified与stale-while-revalidate。 - 区分用户态私有缓存与共享缓存(CDN);敏感资源结合
private/no-store控制缓存范围[参考5]。
参考与验证
- [参考1]MDN 指南:HTTP 缓存总览与 Cache-Control/ETag 示例:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/Caching
- [参考2]web.dev:HTTP 缓存(ETag/Last-Modified、stale-while-revalidate):https://web.dev/i18n/zh/http-cache/
- [参考3]技术文章:Cache-Control max-age 与 stale-while-revalidate 的配合示例:https://dev.to/didof/web-caching-cache-control-3plb
- [参考4]技术文章:Cache-Control 与 ETag 的高效组合与 must-revalidate 解读:https://dev.to/andreasbergstrom/understanding-cache-control-and-etag-for-efficient-web-caching-2nf5
- [参考5]MDN 中文:Cache-Control 详解(immutable、stale-while-revalidate、must-revalidate):https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Cache-Control
关键词校验
关键词聚焦 HTTP 缓存核心机制,与正文一致。

发表评论 取消回复