差异化缓存通过服务器响应头按路径或页面类型设置不同Cache-Control值:首页缓存1小时,内页10分钟,静态资源更久,CDN可分层配置并避免Vary: Cookie等陷阱。

首页通常内容稳定、更新频率低,适合设置较长缓存时间;内页(如新闻、产品详情、博客文章)更新更频繁,需要更短的缓存或动态判断是否过期。实现差异化缓存有效期,关键在服务器响应头控制,而不是前端硬编码。
按URL路径区分缓存策略
在Nginx或Apache中,通过匹配请求路径,对不同位置设置不同Cache-Control头:
- Nginx示例:首页(
/)设为缓存1小时,其他HTML页面设为10分钟
location = / {<br> add_header Cache-Control "public, max-age=3600";<br>}<br>location ~ \.html$ {<br> add_header Cache-Control "public, max-age=600";<br>}- Apache可用
<Location>或FilesMatch实现类似逻辑 - 注意:静态资源(JS/CSS/图片)建议单独配置,通常比HTML缓存更久
利用后端模板动态注入缓存头
如果首页和内页由同一套PHP/Node.js/Java程序渲染,可在响应前根据页面类型设置响应头:
- 首页逻辑中写:
header('Cache-Control: public, max-age=7200'); - 文章详情页中写:
header('Cache-Control: public, max-age=300'); - 更精细的做法是读取文章最后更新时间,用
max-age+Last-Modified组合,让浏览器自动协商缓存有效性
结合CDN做分层缓存控制
多数CDN(如Cloudflare、阿里云DCDN、腾讯云CDN)支持按Host+Path规则设置缓存TTL:
- 添加规则:
域名.com/ → 缓存3600秒 - 添加规则:
域名.com/article/* → 缓存600秒 - 可进一步排除带查询参数的URL(如
?utm_source=xxx),避免缓存污染 - CDN层缓存生效优先级高于源站Header,需确认CDN未强制覆盖
避免常见陷阱
差异化缓存容易出问题的地方:
- 不要在HTML里用
<meta http-equiv="Cache-Control">——该标签对HTTP缓存无效,仅影响部分历史浏览器的页面刷新行为 - 确保源站和CDN都禁用了
Vary: Cookie(除非真需按用户身份缓存),否则会大幅降低缓存命中率 - 首页若含动态区块(如实时访问数、登录态提示),应通过ESI或AJAX异步加载,而非牺牲整页缓存
- 测试时用
curl -I或浏览器开发者工具Network面板查看Cache-Control和Age响应头,确认策略已真实生效


















