HTTP与CDN缓存配置实战指南
1. HTTP缓存与CDN缓存的核心价值解析作为从业十余年的Web性能优化专家我见过太多团队在缓存配置上栽跟头。有个电商项目曾因缓存配置不当导致促销页面更新延迟直接损失数百万销售额。HTTP缓存和CDN缓存就像网站性能的左右护法——前者解决客户端重复请求问题后者解决地理距离带来的延迟问题。二者的本质区别在于作用域HTTP缓存浏览器级别的本地缓存遵循RFC规范CDN缓存分布式边缘节点缓存依赖服务商实现当用户访问https://example.com/index.html时完整的缓存交互流程是这样的浏览器检查本地缓存是否有效强缓存校验无效则向CDN边缘节点发起请求CDN节点检查自身缓存有效性都无效时才回源到实际服务器2. HTTP缓存深度配置指南2.1 强缓存实战策略我在京东云项目中验证过的配置模板location ~* \.(js|css|png)$ { add_header Cache-Control public, max-age31536000; add_header ETag ; }关键参数解析max-age315360001年缓存期适合带哈希的静态资源public允许中间代理缓存禁用ETag避免协商缓存请求踩坑提醒Safari对no-cache的处理有差异实测会忽略must-revalidate指令2.2 协商缓存高级玩法动态接口的缓存配置示例location /api/products { add_header Cache-Control no-cache; add_header ETag $upstream_http_etag; add_header Last-Modified $upstream_http_last_modified; }性能对比测试结果策略QPS提升带宽节省无缓存基准基准仅Last-Modified38%45%ETagLast-Modified52%67%3. CDN缓存进阶技巧3.1 边缘节点缓存规则京东云CDN的实际配置界面包含这些关键项文件类型缓存策略如.jpg永久缓存目录级缓存覆盖回源HOST设置智能压缩开关缓存继承的黄金法则当源站返回Cache-Control时CDN默认优先采用特殊指令如private会禁用CDN缓存无缓存头时京东云会默认添加max-age36003.2 缓存预热与刷新通过API实现自动化预热def preheat_cdn(urls): params { urls: urls, area: global # 支持按区域预热 } response jdcloud_sdk.call(cdn:preheat, params) return response[taskId]刷新操作的注意事项目录刷新有每分钟限额URL刷新生效需要2-5分钟预热任务量大时需要排队4. 复合缓存问题排查手册4.1 经典故障案例案例用户反映看到的是旧版页面 排查步骤检查浏览器本地缓存Chrome DevTools的Network面板验证CDN节点缓存通过curl -I查看Age头确认源站Last-Modified时间检查是否有缓存污染如URL带随机参数4.2 性能优化矩阵不同资源的推荐配置资源类型HTTP缓存CDN缓存版本控制HTMLmax-age60继承内容哈希JS/CSSmax-age315360001年文件名哈希图片max-age25920001月时间戳参数API数据no-cache禁用ETag验证5. 前沿缓存模式探索5.1 动态内容缓存通过边缘计算实现个性化缓存set $cache_key $host$request_uri$http_x_user_token; proxy_cache_key $cache_key;5.2 缓存状态监控京东云提供的监控指标命中率按地域分布回源带宽趋势TOP URL缓存失效分析预热任务执行状态在大型促销活动中我们会设置命中率警戒线通常≥95%当低于阈值时自动触发以下操作增加预热线程数临时放宽刷新频率限制启用备源站负载均衡缓存配置从来不是一劳永逸的工作需要持续监控和调优。最近在处理一个SPA项目时发现即使配置了正确的缓存头由于Service Worker的介入实际缓存行为变得异常复杂。这提醒我们在现代Web架构中必须把PWA、HTTP/3等新因素纳入缓存策略的考量范围。