这一页不写结论:打开就把 8 个只读端点逐个打一遍,把 HTTP 状态、耗时、响应字节、PASS/FAIL 一行行贴出来,再摊开构建版本与数据新鲜度。每个数字都写着来源端点,取不到就是「未取到」—— 没有样例值、没有补零、没有缓存外的美图。
—等待体检…
| 端点 | 用途 | HTTP | 耗时 ms | 字节 | 判定 | 说明 |
|---|---|---|---|---|---|---|
| 等待体检…(数据全部由前端 fetch 得到,脚本被禁用时这里不会出现任何数字) | ||||||
口径:基址来自 <meta name="wb-api">,路径就是表格每一行自己写的;
PASS = HTTP 2xx 且响应能解析成 JSON(.js 别名还要求 code=200),
FAIL = 其它一切情况(超时、跨源失败、非 JSON、接口自报失败——此时 HTTP/字节可能显示「未取到」)。
耗时 = fetch 发起到响应体读完;字节 = 解码后的 UTF-8 字节数(跨源读不到压缩后传输量)。
接口带 max-age=45s,命中浏览器或边缘缓存时耗时会接近 0ms —— 所以「快」不等于「新」,新不新看下面第 3 块。
| 项目 | 字段(端点) | 值 |
|---|---|---|
| 构建 SHA | /api/health · buildSha | 未取到 |
| 进程已运行 | /api/health · uptimeMs | 未取到 |
| 健康自述 | /api/health · status / application / branch | 未取到 |
| 发布目录 | deploy.js · data.release.release | 未取到 |
| 发布时刻 builtAt | deploy.js · release.builtAt / publishedAt / switchedAt | 未取到 |
| 文件数 files | deploy.js · release.files / fileCount | 未取到 |
| 总字节 totalBytes | deploy.js · release.totalBytes | 未取到 |
| 最近发布 history | deploy.js · release.history(取最近 3 条) | 未取到 |
| 版本对得上吗 | health.buildSha vs deploy.build.sha | 未取到 |
为什么有的是「未取到」:deploy.js 只端出源站上那份 release 信息里真的写了的键。
线上这份目前没有 files / history,所以那两行固定显示「未取到」而不是编造;
builtAt 会按 publishedAt → switchedAt → build.buildTime 的顺序找,
都找不到就照实说。最后一行是两处自述的交叉核对:不一致说明前端与进程不是同一次发布。
| 项目 | 字段(端点) | 值 |
|---|---|---|
| 数据时间 | home.js · data.alerts.generatedAt | 未取到 |
| 缓存秒数 | home.js · data.alerts.cacheSeconds | 未取到 |
| 距今(本机时钟) | 页面按 generatedAt 现算(该值不带时区,按浏览者本地时间解析) | 未取到 |
| 服务端快照 | home.js · snapshotAt / cacheAgeSeconds | 未取到 |
| 响应头 Age | 本次 home.js 响应的 Age 头(真实年龄 ≈ cacheAgeSeconds + Age) | 未取到 |
| 新鲜度判定 | age ≤ cacheSeconds + 2 秒容差 | 未取到 |
判定优先用服务端 snapshotAt(带时区、口径最硬),取不到才退回按 generatedAt 用本机时钟算;
两个都在秒级刷新,所以这行会随时间自己变旧 —— 这正是要你看的:页面上的数字不是硬编码,它在变旧。
接口带 stale-while-revalidate=90:边缘节点回源刷新期间会先把最多约两分钟的旧副本发给你,
所以「偏旧」通常不是接口挂了(刷新一次多半回到「新鲜」);cacheAgeSeconds + Age 就是这份数据的真实年龄。
本机时钟如果比服务端快/慢,会出现负数或整小时级偏差,此时页面写「本机时钟早于服务端…」并不判定,而不是假装新鲜。
# ① 服务是否活着 + 构建 SHA(对应表格第 1 行) curl -s https://demo.xiaokeqing.cn/api/health # ② 首页聚合:alerts + geo + honeypot 三合一(对应表格第 2 行) curl -s https://demo.xiaokeqing.cn/api/public/home.js # ③ 处置审计:护栏 / 封禁留痕(对应表格第 4 行) curl -s https://demo.xiaokeqing.cn/api/public/audit.js
同一时刻在你自己的终端敲,数字应该和上面那几张表对得上;对不上,问题就在这里,不是页面修图。 取不到的时候(断网、401、429 限流、源站挂了),本页对应行就显示「未取到」并带上原因: 卡片不填 0,不拿别的时刻的数凑数,也不把旧缓存当新数据 —— 这正是这一页的意义。