深度解析:HTTP与CDN缓存配置全攻略

一、HTTP缓存机制详解

HTTP缓存通过减少重复请求提升性能,其核心依赖两个关键字段:Cache-ControlETag

1.1 Cache-Control指令配置

Cache-Control是HTTP/1.1引入的缓存控制头,通过指令组合实现精细控制:

  1. Cache-Control: max-age=3600, public, immutable
  • max-age:指定资源缓存有效期(秒),如3600表示1小时后过期。
  • public/privatepublic允许中间节点(如CDN)缓存,private仅限用户浏览器缓存。
  • immutable:告知客户端资源永不修改,可跳过验证直接使用缓存。
  • no-cache/no-storeno-cache需验证后使用缓存,no-store禁止缓存。

实践建议

  • 静态资源(如JS/CSS)建议设置max-age=31536000(1年)并标记immutable
  • 动态API响应通常使用no-cache,确保数据实时性。

1.2 验证机制:ETag与Last-Modified

当缓存过期时,客户端通过以下方式验证资源是否更新:

  • ETag:服务器生成的唯一标识(如哈希值),客户端携带If-None-Match头请求。
    1. If-None-Match: "686897696a7c876b7e"
  • Last-Modified:资源最后修改时间,客户端携带If-Modified-Since头。

优化技巧

  • 优先使用ETag,因其能精确检测内容变化,避免时间同步问题。
  • 服务器响应304 Not Modified时,客户端可复用本地缓存,减少数据传输。

二、CDN缓存配置策略

CDN通过分布式节点缓存资源,配置需兼顾性能与一致性。

2.1 缓存规则设置

CDN控制台通常提供以下配置项:

  • 缓存时间(TTL):按文件类型或路径设置不同TTL。
    1. /static/*.js TTL=864001天)
    2. /api/* → TTL=60(1分钟)
  • 缓存键(Cache Key):决定缓存唯一性的字段组合,如:
    1. {uri}{host}{cookie}

    建议排除无关字段(如user-agent)以提升命中率。

案例分析
某电商网站将商品详情页图片TTL设为24小时,价格API TTL设为5分钟,平衡了访问速度与数据实时性。

2.2 回源策略优化

当CDN节点无缓存时,需配置回源请求:

  • 回源协议:支持HTTPHTTPS协议跟随,建议启用HTTPS保障安全。
  • 回源Host:指定源站域名,避免因CDN节点IP变化导致服务异常。
  • 302跟随:是否追踪源站返回的跳转响应,动态内容建议开启。

性能数据
启用协议跟随后,某金融平台回源失败率下降40%,因避免了SSL证书不匹配问题。

三、高级配置技巧

3.1 服务端缓存控制

Node.js示例:设置动态资源的缓存头

  1. app.get('/api/data', (req, res) => {
  2. const data = fetchData(); // 获取数据
  3. res.set('Cache-Control', 'no-cache');
  4. res.set('ETag', generateETag(data));
  5. res.json(data);
  6. });

3.2 浏览器与CDN协同

  • 阶梯式缓存:浏览器设短TTL(如5分钟),CDN设长TTL(如1小时),减少源站压力。
  • Purge预加载:发布新版本前,主动推送资源到CDN并预热节点。

3.3 监控与调优

  • 缓存命中率:目标>90%,低于此值需检查TTL或缓存键配置。
  • 日志分析:通过CDN日志识别高频404请求,优化资源路径。

四、常见问题解决方案

  1. 缓存雪崩:同一时间大量缓存过期,导致源站崩溃。

    • 对策:为TTL添加随机偏移量(如±300秒)。
  2. 污染攻击:恶意请求填充CDN缓存,占用空间。

    • 对策:设置缓存大小上限,配置IP黑名单。
  3. 跨域问题:CDN资源被浏览器拦截。

    • 对策:源站返回Access-Control-Allow-Origin: *头。

五、总结与行动清单

  1. 静态资源:设置max-age=1年 + immutable
  2. 动态API:使用no-cache + ETag验证。
  3. CDN配置:按文件类型分级TTL,启用HTTPS回源。
  4. 监控体系:建立缓存命中率、回源流量等指标看板。

通过系统化配置HTTP与CDN缓存,可显著降低服务器负载,提升用户访问速度。建议每季度复审缓存策略,适应业务变化。