Server-Timing 头

Baseline 广泛可用 *

此功能已成熟,并可在许多设备和浏览器版本上运行。自 2023 年 3 月以来,它已在各种浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

HTTP Server-Timing 响应头向用户代理传达一个或多个关于请求-响应周期的性能指标。它用于在用户浏览器的开发者工具或 PerformanceServerTiming 接口中显示后端服务器计时指标(例如,数据库读/写、CPU 时间、文件系统访问等)。

头类型 响应头
禁止请求头

语法

http
// A single metric
Server-Timing: <timing-metric>

// Multiple metrics as a comma-separated list
Server-Timing: <timing-metric>, …, <timing-metricN>

<timing-metric> 具有一个名称,并且可以包含一个可选的持续时间和一个可选的描述。例如

http
// 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=proddesc="DB lookup"

名称和描述应尽可能短(例如,使用缩写并省略可选值),以最大程度地减少 HTTP 数据开销。

描述

隐私和安全

Server-Timing 头可能会暴露潜在敏感的应用程序和基础设施信息。根据用例决定发送哪些指标、何时发送以及谁应该看到它们。例如,您可能决定只向已验证用户显示指标,而不向公共响应显示任何内容。

PerformanceServerTiming 接口

除了在浏览器的开发者工具中显示 Server-Timing 头指标外,PerformanceServerTiming 接口还允许工具自动从 JavaScript 收集和处理指标。此接口仅限于同源,但您可以使用 Timing-Allow-Origin 头来指定允许访问服务器指标的域。在某些浏览器中,该接口仅在安全上下文(HTTPS)中可用。

Server-Timing 头的组件与 PerformanceServerTiming 属性的映射关系如下:

示例

使用 Server-Timing 头发送指标

以下响应包含一个名为 custom-metric 的指标,持续时间为 123.45 毫秒,描述为 "My custom metric"

http
Server-Timing: custom-metric;dur=123.45;desc="My custom metric"

Server-Timing 作为 HTTP 尾部

在以下响应中,Trailer 头用于指示 Server-Timing 头将在响应正文之后。发送一个名为 custom-metric 的指标,持续时间为 123.4 毫秒。

http
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

浏览器兼容性

另见