缓存是CDN的灵魂
CDN的价值在于缓存。合理的缓存策略可以将源站流量减少90%以上,同时将全球用户的访问延迟降至最低。但错误的缓存策略可能导致用户看到过期内容或隐私泄露。
缓存控制头详解
Cache-Control
- public:允许CDN和浏览器缓存
- private:仅浏览器缓存,CDN不缓存(用于个性化内容)
- max-age=3600:缓存有效期1小时
- s-maxage=86400:CDN缓存24小时(覆盖max-age)
- stale-while-revalidate=60:过期后60秒内仍返回旧缓存同时异步更新
- no-store:完全不缓存(敏感数据必须设置)
ETag与Last-Modified
条件请求机制,CDN向源站验证缓存是否仍然有效。304响应不传输内容体,节省带宽。ETag基于内容哈希更精确,Last-Modified基于时间戳更简单。
按内容类型定制策略
- 静态资源(JS/CSS/图片):哈希化文件名 + max-age=31536000(1年)+ immutable
- HTML页面:max-age=0 + s-maxage=300 + stale-while-revalidate=60
- API响应:视业务定制,列表接口可缓存30秒,用户数据不缓存
- 动态内容:使用Vary头按Cookie/Accept-Language等区分缓存版本
缓存失效策略
主动Purge
内容更新时通过API主动清除CDN缓存。支持精确URL Purge和通配符Purge。Cloudflare的Purge全球生效时间小于30秒。
Tag-based Purge
为缓存对象打Tag,按Tag批量失效。例如商品详情页打标签product-123,价格更新时Purge所有带此标签的缓存。Fastly Surrogate-Key实现最成熟。
监控缓存效果
关键指标:缓存命中率(目标大于90%)、源站回源量、CDN带宽节省比例。使用CDN提供的分析面板或自建监控追踪这些指标。