工程实践:静态发布如何避免版本错配
这是 Kyormar 官网自身的工程实践,不是客户案例:用可回滚发布、HTML 重验证和跨版本哈希资源解决旧页面引用已清理资源的问题。
案例范围仅覆盖官网静态发布链。它不代表客户数量、产品使用效果或商业收益。
现象:路由后样式消失,看起来像白屏
浏览器可能复用旧 HTML,而发布脚本已经清理旧版本的哈希 CSS/JS。旧 HTML 随后引用不存在的资源,表现为样式失效、Cookie 面板消失或内容出现异常。
第一处错误边界不在 SSR
首页已经由 Astro 构建为完整静态 HTML。问题发生在“旧 HTML → 已删除哈希资源”这一发布边界,而不是服务器没有预渲染首页。
修复:让 HTML 重新验证,让哈希资源长期可用
HTML
Cache-Control: no-cache, max-age=0, must-revalidate
/_astro/*
Cache-Control: public, max-age=31536000, immutable每次发布原子切换当前版本,同时把内容哈希资源累积到跨版本共享目录。若同名哈希文件内容不同,发布直接失败,避免破坏 immutable 语义。
门禁:失败时恢复旧版本
- 验证发布清单与目标版本一致。
- 随机选择真实哈希资源,确认一年 immutable 缓存头。
- 确认首页 HTML 使用重新验证缓存策略。
- 任一检查失败,原子恢复发布前的 current 软链接。
完整运维约束保存在源码仓库的部署文档与发布脚本中;公开页面只陈述已经验证的机制。
