surfup

发布后检查 CDN 和浏览器缓存

判断旧版本来自过期 HTML、边缘缓存还是浏览器缓存。

清除 CDN 缓存不会清除访客浏览器中已经存储的文件。先检查响应经过的路径,再决定是否大范围清除缓存或延长缓存 TTL。

比较 HTML 和带版本号的资源

  • 在干净的浏览器会话中请求确切的页面和资源。记录状态、Age、Cache-Control、ETag/Last-Modified,以及存在时的 CDN 缓存状态标头。
  • 检查 HTML 是否会在导航时重新验证,以及带内容哈希的 JS/CSS 是否使用较长的缓存时间。不要对可变 URL 设置 immutable 和一年期缓存策略。

只清除过期的缓存层

  • 如果 CDN 返回旧字节,只清除确切 URL 或版本,然后从两个网络重新检查。如果只有一个浏览器内容过期,先用全新配置文件测试,再改边缘规则。
  • 变更后分别验证登录页面和公开页面。个性化响应不应进入共享缓存;记录标头并保留旧规则以便回滚。

示例和预期结果

  • 对页面运行 curl -sS -D page.headers -o page.html PAGE_URL;对带哈希的资源使用 asset.headers 和 asset.bin 等不同文件名。检查已保存的 page.html,或将构建标识与 origin 比较。部署后重新执行两个 GET 请求,比较 Age 和 CDN 状态标头;同时检查 Cache-Control 和 ETag。HTML 可能默认不缓存,因此先检查网站的实际规则。
  • 如果只有一个浏览器配置文件显示旧内容,请检查其 service worker 和本地缓存。如果 CDN 返回旧的 HIT,只清除受影响的准确路径,然后在全新配置文件中重试。如果 origin 本身也是旧版本,先修复部署/origin。不要清除无关路径。

主要来源