Server-Timing 头
Baseline 广泛可用 *
HTTP Server-Timing
响应头向用户代理传达一个或多个关于请求-响应周期的性能指标。它用于在用户浏览器的开发者工具或 PerformanceServerTiming
接口中显示后端服务器计时指标(例如,数据库读/写、CPU 时间、文件系统访问等)。
语法
// A single metric
Server-Timing: <timing-metric>
// Multiple metrics as a comma-separated list
Server-Timing: <timing-metric>, …, <timing-metricN>
<timing-metric>
具有一个名称,并且可以包含一个可选的持续时间和一个可选的描述。例如
// A metric with a name only
Server-Timing: missedCache
// A metric with a duration
Server-Timing: cpu;dur=2.4
// A metric with a description and duration
Server-Timing: cache;desc="Cache Read";dur=23.2
// Two metrics with duration values
Server-Timing: db;dur=53, app;dur=47.2
指令
<timing-metric>
-
一个逗号分隔的一个或多个指标列表,每个指标由以下用分号分隔的组件组成:
<name>
-
一个名称标记(无空格或特殊字符),用于表示实现特定或由服务器定义的指标,例如
cacheHit
。 <duration>
可选-
持续时间表示为字符串
dur
,后跟=
,再后跟一个值,例如dur=23.2
。 <description>
可选-
描述表示为字符串
desc
,后跟=
,再后跟一个作为标记或带引号字符串的值,例如desc=prod
或desc="DB lookup"
。
名称和描述应尽可能短(例如,使用缩写并省略可选值),以最大程度地减少 HTTP 数据开销。
描述
隐私和安全
Server-Timing
头可能会暴露潜在敏感的应用程序和基础设施信息。根据用例决定发送哪些指标、何时发送以及谁应该看到它们。例如,您可能决定只向已验证用户显示指标,而不向公共响应显示任何内容。
PerformanceServerTiming 接口
除了在浏览器的开发者工具中显示 Server-Timing
头指标外,PerformanceServerTiming
接口还允许工具自动从 JavaScript 收集和处理指标。此接口仅限于同源,但您可以使用 Timing-Allow-Origin
头来指定允许访问服务器指标的域。在某些浏览器中,该接口仅在安全上下文(HTTPS)中可用。
Server-Timing
头的组件与 PerformanceServerTiming
属性的映射关系如下:
"name"
->PerformanceServerTiming.name
"dur"
->PerformanceServerTiming.duration
"desc"
->PerformanceServerTiming.description
示例
使用 Server-Timing 头发送指标
以下响应包含一个名为 custom-metric
的指标,持续时间为 123.45
毫秒,描述为 "My custom metric"
Server-Timing: custom-metric;dur=123.45;desc="My custom metric"
Server-Timing 作为 HTTP 尾部
在以下响应中,Trailer
头用于指示 Server-Timing
头将在响应正文之后。发送一个名为 custom-metric
的指标,持续时间为 123.4
毫秒。
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Trailer: Server-Timing
--- response body ---
Server-Timing: custom-metric;dur=123.4
警告: 只有浏览器的开发者工具可以将 Server-Timing
头作为 HTTP 尾部来在“网络 -> 计时”选项卡中显示信息。Fetch API 无法访问 HTTP 尾部。有关更多信息,请参阅浏览器兼容性。
规范
规范 |
---|
服务器计时 # the-server-timing-header-field |
浏览器兼容性
加载中…