静态站点上线后,用 curl 做一次可复现的发布验收

举报
yd_267833669 发表于 2026/10/23 12:54:11 2026/10/23
【摘要】 Nginx 返回 200 不代表发布完成。本文用状态码、响应体哈希和缓存头三个检查,确认公网访问到的确实是刚上传的 index.html,并列出常见误判。

静态站点上线后,用 curl 做一次可复现的发布验收

把 index.html 上传到 Nginx 目录并拿到公网地址,只完成了发布的一半。浏览器能打开页面,仍可能命中 CDN 缓存、旧文件或另一台后端。下面这组检查用三个结果回答同一个问题:公网用户现在拿到的,是否就是刚上传的那份文件。

1. 检查状态码和响应头

curl -sS -o /dev/null -D /tmp/static-headers.txt \
  -w '%{http_code} %{content_type} %{size_download}\n' \
  https://example.com/

预期是:

200 text/html 12345

返回 301 或 302 时,先确认跳转终点是否为同一站点。返回 403 时,检查 Nginx 用户能否穿过每一级父目录权限。返回 404 时,看 root、alias 和 try_files 是否指向实际文件,不要先怪浏览器缓存。

2. 比较响应体哈希

只看到状态码还不够。下载公网响应,并与本地源文件比较:

sha256sum ./index.html
curl -fsS https://example.com/ -o /tmp/index.html
sha256sum /tmp/index.html

两个哈希一致,说明本次连接拿到的字节与本地文件一致。若服务端做了 HTML 注入或压缩后返回了不同内容,先确认差异是否来自预期功能。没有必要为了追求哈希一致而关闭压缩,curl 解压后检查正文即可。

3. 区分源站和缓存层

浏览器经常能使用缓存,而命令行的请求路径不同。检查时要显式读取响应头:

curl -sSI https://example.com/ \
  -H 'Cache-Control: no-cache'

重点看 Age、ETag、Last-Modified 和 Server。刚刚发布却出现较大的 Age,通常说明请求命中了 CDN。不要用浏览器刷新页面证明缓存已经失效;发布流程里应记录当前文件哈希,再核对公网响应的哈希。

常见误判

  • 浏览器显示旧页面:可能命中 CDN、Service Worker 或本地缓存。
  • 公网返回 200,内容仍旧:源站文件可能已更新,但对象存储或 CDN 没有刷新。
  • 一台机器正常,另一台异常:检查负载均衡后端的部署时间,而不是只看域名状态。
  • 页面显示 404 风格内容但状态码仍是 200:需要检查响应体开头、标题和关键字符串,状态码不是唯一判定。

一条最小的验收记录

发布任务至少保存以下信息:

发布时间:2026-10-23T05:10:00Z
本地 SHA256:<hash>
公网状态码:200
公网 SHA256:<hash>
响应 Server:<name>
ETag:<etag>

发布完成的判据是:公网状态码符合预期,响应体与目标版本一致,跳转和缓存行为也已确认。页面能打开只是第一条线索。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。