Server-Timing 是什么
Server-Timing 是 W3C 定义的标准响应头,用来把服务端各阶段的耗时暴露出来:数据库查询多久、缓存命中花了几毫秒、模板渲染占了多少时间。指标以名称加参数的形式书写,浏览器开发者工具能在网络面板里直接展示这些分段耗时。相比部署一套全链路追踪系统,它几乎零成本,非常适合快速回答「这个接口慢在哪一段」。
基本信息
| 名称 | Server-Timing |
|---|---|
| 作用 | 暴露服务端分段耗时指标 |
| 规范 | W3C Server Timing |
| 语法 | 指标名加分号,可带 dur 与 desc 参数 |
| 多指标 | 以逗号分隔,可写成一个头 |
| 展示位置 | 浏览器开发者工具网络面板 |
响应示例与验证
响应示例与验证
curl -si https://api.example.com/report | grep -i server-timing
# Server-Timing: db;dur=53.2;desc="mysql", cache;dur=2.1;desc="redis", app;dur=120;desc="render"
# 浏览器侧在开发者工具的网络面板里可直接看到这些分段参数含义
| 参数 | 含义 | 注意点 |
|---|---|---|
| 指标名 | 分段名称,如 db、cache、app | 自己定义,需团队内统一 |
| dur | 该段耗时,单位毫秒 | 允许小数 |
| desc | 描述文本 | 需加引号,内容要避免暴露内部细节 |
典型使用场景
- 接口性能定位:快速区分瓶颈在数据库、缓存还是应用逻辑
- 前端联调:开发者工具里直接看到后端分段耗时,减少来回沟通
- 灰度对比:新旧实现并行时对比同口径的分段耗时
- 容量评估:给关键路径的分段耗时建立告警基线
- 线上抽检:用一行 curl 命令拿到耗时构成,不必接入追踪系统
该头的用途是诊断,不是业务功能:它的耗时口径由实现方自己定义,跨系统比较时需要先确认口径一致。生产环境还应注意不要把敏感的库名、内部地址或业务指标写进描述文本,只对内部流量开启,或在边缘统一剥离。