recursal/MDN huggingface dataset:
Access-Control-Request-Method
=============================

请求头 **`Access-Control-Request-Method`** 出现于 preflight request（预检请求）中，用于通知服务器在真正的请求中会采用哪种 HTTP 方法。因为预检请求所使用的方法总是 `OPTIONS` ，与实际请求所使用的方法不一样，所以这个请求头是必要的。

| Header type | Request header |
| --- | --- |
| Forbidden header name | yes |

语法
--
```

Access-Control-Request-Method: <method>
```

指令
--

<method>

一种 HTTP 请求方法, 例如 `GET`、`POST` 或 `DELETE`。

示例
--
```

Access-Control-Request-Method: POST
```

规范
--

| Specification |
| --- |
| Fetch Standard # http-access-control-request-method |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Access-Control-Request-Headers`
Proxy-Authenticate
==================

The HTTP **`Proxy-Authenticate`** 是一个响应首部，指定了获取 proxy server（代理服务器）上的资源访问权限而采用的身份验证方式。代理服务器对请求进行验证，以便它进一步传递请求。

`Proxy-Authenticate` 首部需要与 `407` `Proxy Authentication Required` 响应一起发送。

| Header type | Response header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Proxy-Authenticate: <type> realm=<realm>
```

指令
--

<type>

身份验证类型。一个常见的类型是 "基本验证"。IANA 机构维护了 一系列的身份验证机制。

realm=<realm>

对于被保护区域（即安全域）的描述。如果没有指定安全域，客户端通常用一个格式化的主机名来代替。

示例
--
```

Proxy-Authenticate: Basic

Proxy-Authenticate: Basic realm="Access to the internal site"
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.proxy-authenticate |

相关内容
----

* HTTP authentication
* `Authorization`
* `Proxy-Authorization`
* `WWW-Authenticate`
* `401`, `403`, `407`
If-Range
========

**`If-Range`** HTTP 请求头字段用来使得 **`Range`** 头字段在一定条件下起作用：当字段值中的条件得到满足时，**`Range`** 头字段才会起作用，同时服务器回复`206` 部分内容状态码，以及\*\*`Range`\*\* 头字段请求的相应部分；如果字段值中的条件没有得到满足，服务器将会返回 `200` `OK` 状态码，并返回完整的请求资源。

字段值中既可以用 `Last-Modified` 时间值用作验证，也可以用`ETag`标记作为验证，但不能将两者同时使用。

**`If-Range`** 头字段通常用于断点续传的下载过程中，用来自从上次中断后，确保下载的资源没有发生改变。

| Header type | Request header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

If-Range: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
If-Range: <etag>
```

说明
--

<etag>

一个资源标签（entity tag）代表着所请求的资源。它是由被双引号包围的 ACSII 编码的字符串组成的（例如`"675af34563dc-tr34"`）。当应用弱匹配算法时，E-Tag 会有一个 `W/` 前缀。


<day-name>

`"Mon"`，`"Tue"`，`"Wed"`，`"Thu"`，`"Fri"`，`"Sat"` 或者 `"Sun"` 当中的一个（大小写敏感）。

<day>

两位数字，例如`"04"或者"23"`。

<month>

`"Jan"`，`"Feb"`，`"Mar"`，`"Apr"`，`"May"`，`"Jun"`，`"Jul"`，`"Aug"`，`"Sep"`，`"Oct"`，`"Nov"`，或者 `"Dec"` 中的一个（大小写敏感）。

<year>

四位数字，例如`"1990"` 或者 `"2016"`。

<hour>

两位数字，例如 `"09"` 或者 `"23"`。

<minute>

两位数字，例如 `"04"` 或者 `"59"`。

<second>

两位数字，例如 `"04"` 或者 `"59"`。

`GMT`

格林威治标准时间。HTTP 协议的日期总是要使用 GMT，而不是当地时间。

示例
--
```

If-Range: Wed, 21 Oct 2015 07:28:00 GMT
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.if-range |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `ETag`
* `Last-Modified`
* `If-Modified-Since`
* `If-Unmodified-Since`
* `If-Match`
* `If-None-Match`
* `206` Partial Content
* HTTP Conditional Requests
Access-Control-Allow-Methods
============================

响应首部 **`Access-Control-Allow-Methods`** 在对 preflight request.（预检请求）的应答中明确了客户端所要访问的资源允许使用的方法或方法列表。

| 报头类型 | Response header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Access-Control-Allow-Methods: <method>, <method>, ...
```

指令
--

<method>

用逗号隔开的允许使用的 HTTP request methods 列表。

例子
--
```

Access-Control-Allow-Methods: POST, GET, OPTIONS
```

规范
--

| Specification |
| --- |
| Fetch Standard # http-access-control-allow-methods |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

兼容性注解
-----

* 最新规范中提到的通配符值 (\*) 尚未在以下浏览器中实现：
    + Chromium: Issue 615313
    + Firefox: Firefox bug 1309358
    + Servo: Issue 13283
查看更多
----

* `Access-Control-Allow-Origin`
* `Access-Control-Expose-Headers`
* `Access-Control-Allow-Headers`
* `Access-Control-Request-Method`
Warning
=======

**`Warning`** 是一个通用报文首部，包含报文当前状态可能存在的问题。在响应中可以出现多个 Warning 首部。

一般来说，Warning 首部可以应用于任何类型的报文。然而一部分警告码（warn-code）是为缓存代理服务器定制的，并且只可以应用在响应报文中。

| Header type | General header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Warning: <warn-code> <warn-agent> <warn-text> [<warn-date>]
```

指令
--

<warn-code>

三位数字警告码。第一位数字表示 Warning 信息在验证之后是否需要从已存储的响应中删除。

* `1xx` 警告码描述了关于当前响应的有效期或者验证状态，并且将会在成功验证后被缓存服务器删除。
* `2xx` 警告码描述了验证之后不会被修复的某些展现内容方面的警告信息，并且在验证之后不会被缓存服务器删除。

<warn-agent>

添加到 Warning 首部的服务器或者软件的名称或者伪名称（当代理不可知的时候可以用 "-" 代替）。

<warn-text>

用来描述错误信息的警告文本。

<warn-date>

可选。假如多个 Warning 被发送，那么需包含一个与 `Date` 首部相对应的日期字段。

警告码
---

由 iana.org 维护的 HTTP 警告码登记表规定了警告码的命名空间。

| 码值 | 文字描述 | 详细说明 |
| --- | --- | --- |
| 110 | Response is Stale | 由缓存服务器提供的响应已过期（设置的失效时间已过）。 |
| 111 | Revalidation Failed | 由于无法访问服务器，响应验证失败。 |
| 112 | Disconnected Operation | 缓存服务器断开连接。 |
| 113 | Heuristic Expiration | 如果缓存服务器采用启发式方法，将缓存的有效时间设定为 24 小时，而在该响应的年龄超过 24 小时时发送。 |
| 199 | Miscellaneous Warning | 任意的、未明确指定的警告信息。 |
| 214 | Transformation Applied | 由代理服务器添加，如果它对返回的展现内容进行了任何转换，比如改变了内容编码、媒体类型等。 |
| 299 | Miscellaneous Persistent Warning | 与 199 类似，只不过指代的是持久化警告。 |

示例
--
```

Warning: 110 anderson/1.3.37 "Response is stale"

Date: Wed, 21 Oct 2015 07:28:00 GMT
Warning: 112 - "cache down" "Wed, 21 Oct 2015 07:28:00 GMT"
```

规范
--

| Specification |
| --- |
| HTTP Caching # field.warning |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Date`
* HTTP respnose status codes
Upgrade-Insecure-Requests
=========================

**`Upgrade-Insecure-Requests`** 是一个请求首部，用来向服务器端发送信号，表示客户端优先选择加密及带有身份验证的响应，并且它可以成功处理 `upgrade-insecure-requests` CSP (en-US) 指令。

| Header type | Request header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Upgrade-Insecure-Requests: 1
```

示例
--

客户端向服务器端发送信号表示它支持 `upgrade-insecure-requests` 的升级机制：
```

GET / HTTP/1.1
Host: example.com
Upgrade-Insecure-Requests: 1
```


服务器现在可以重定向到这个站点的安全版本。在响应中可以添加一个 `Vary` 首部，这样的话，响应就不会被缓存服务器提供给不支持升级机制的客户端了。
```

Location: https://example.com/
Vary: Upgrade-Insecure-Requests
```

规范
--

| Specification |
| --- |
| Upgrade Insecure Requests # preference |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Content-Security-Policy`
* CSP `upgrade-insecure-requests` directive
Server
======

**`Server`** 首部包含了处理请求的源头服务器所用到的软件相关信息。

应该避免使用过长或者过于详细的描述作为 Server 的值，因为这有可能泄露服务器的内部实现细节，有利于攻击者找到或者探测已知的安全漏洞。

| Header type | Response header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Server: <product>
```

指令
--

<product>

处理请求的软件或者产品（或组件产品）的名称。

示例
--
```

Server: Apache/2.4.1 (Unix)
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.server |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Allow`
Sec-CH-UA
=========

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

 **安全上下文:** 此项功能仅在一些支持的浏览器的安全上下文（HTTPS）中可用。

**`Sec-CH-UA`** 用户代理客户端提示请求标头（header）提供用户代理的品牌（brand）和重要的版本信息。

|  |  |
| --- | --- |
| 标头类型 | Request header,
 客户端提示 |
| Forbidden header name | 是 |

**`Sec-CH-UA`** 标头在以逗号分隔的列表中提供与浏览器关联的每个品牌的品牌和重要版本。品牌是用户代理的商业名称，例如：Chromium、Opera、Google Chrome、Microsoft Edge、Firefox 和 Safari。用户代理可能有多个关联的品牌。例如，Opera、Chrome 和 Edge 都基于 Chromium，并将在 **`Sec-CH-UA`** 标头中提供这两个品牌。

*significant version* 是`市场`版本标识符，用于区分品牌的主要版本。例如，完整版本号为“96.0.4664.45”的 Chromium 的重要版本号是“96”。因此，标头允许服务器根据共享品牌及其各自特定自定义版本来自定义其响应。

`Sec-CH-UA` 是一个低熵提示。除非被用户代理权限策略阻止，否则默认情况下会发送它，而不需要通过服务器发送 `Accept-CH` 来选择是否发送。

标头可以包含任何位置和任何名称的“假冒”品牌。此功能旨在防止服务器直接拒绝未知的用户代理，迫使用户代理在品牌标识上撒谎。

**备注：** `Sec-CH-UA-Full-Version-List` 与 **`Sec-CH-UA`** 相同，但前者包含完整版本号，而不是每个品牌的重要版本号。

语法
--

用户代理品牌列表中以逗号分隔的品牌列表及其关联的有效版本号。单个条目的语法具有以下格式：


```http
Sec-CH-UA: "<brand>";v="<significant version>", ...
```

### 指令

`<brand>`

与用户代理关联的品牌，例如“Chromium”、“Google Chrome”，又或是故意不正确的品牌，例如 `"Not A;Brand"`.

`<significant version>`

与可区分的 Web 公开功能关联的“市场”版本号。

示例
--

`Sec-CH-UA` 是一个低熵提示。除非被用户代理策略明确阻止，否则它将在所有请求中发送（无需通过服务器发送 `Accept-CH` 来选择是否发送）。

来自 Chromium、Chrome、Edge 和 Opera 桌面浏览器的字符串如下所示。请注意，它们都共享“Chromium”品牌，但有一个额外的品牌表明其来源。它们还具有故意不正确的品牌字符串，该字符串可能出现在任何位置并具有不同的文本。


```http
Sec-CH-UA: "(Not(A:Brand";v="8", "Chromium";v="98"
```



```http
Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
```



```http
Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="96", "Microsoft Edge";v="96"
```



```http
Sec-CH-UA: "Opera";v="81", " Not;A Brand";v="99", "Chromium";v="95"
```

规范
--

| Specification |
| --- |
| User-Agent Client Hints # sec-ch-ua |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 客户端提示
* 用户代理客户端提示 API (en-US)
* 通过用户代理客户端提示改善用户隐私和开发人员体验（web.dev）
* `Accept-CH`
* HTTP 缓存 > Vary 响应和 `Vary`
Date
====

**`Date`** 是一个通用首部，其中包含了报文创建的日期和时间。

| Header type | General header |
| --- | --- |
| Forbidden header name | yes |

语法
--
```

Date: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
```

指令
--

<day-name>

"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", 或 "Sun" 之一（区分大小写）。

<day>

2 位数字表示天数，例如， "04" 或 "23"。

<month>

"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 之一（区分大小写）。

<year>

4 位数字表示年份，例如， "1990" 或 "2016"。

<hour>

2 位数字表示小时数，例如， "09" 或 "23"。

<minute>

2 位数字表示分钟数，例如， "04" 或 "59"。

<second>

2 位数字表示秒数，例如， "04" 或 "59"。

GMT

格林尼治标准时间。在 HTTP 协议中，时间都是用格林尼治标准时间来表示的，而不是本地时间。

示例
--
```

Date: Wed, 21 Oct 2015 07:28:00 GMT
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.date |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `Age`
Content-Encoding
================

实体消息首部 **`Content-Encoding`** 列出了对当前实体消息（消息荷载）应用的任何编码类型，以及编码的顺序。它让接收者知道需要以何种顺序解码该实体消息才能获得原始荷载格式。Content-Encoding 主要用于在不丢失原媒体类型内容的情况下压缩消息数据。

请注意原始媒体/内容的类型通过 `Content-Type` 首部给出，而 `Content-Encoding` 应用于数据的表示，或“编码形式”。如果原始媒体以某种方式编码（例如 zip 文件），则该信息不应该被包含在 `Content-Encoding` 首部内。

一般建议服务器应对数据尽可能地进行压缩，并在适当情况下对内容进行编码。对一种压缩过的媒体类型如 zip 或 jpeg 进行额外的压缩并不合适，因为这反而有可能会使荷载增大。

|  |  |
| --- | --- |
| Header type | Representation header |
| Forbidden header name | no |

语法
--
```

Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
Content-Encoding: br

// 多个，按应用的编码顺序列出
Content-Encoding: deflate, gzip
```

指令
--

`gzip`

表示采用 Lempel-Ziv coding（LZ77）压缩算法，以及 32 位 CRC 校验的编码方式。这个编码方式最初由 UNIX 平台上的 *gzip* 程序采用。出于兼容性的考虑，HTTP/1.1 标准提议支持这种编码方式的服务器应该识别作为别名的 `x-gzip` 指令。

`compress`

采用 Lempel-Ziv-Welch（LZW）压缩算法。这个名称来自 UNIX 系统的 *compress* 程序，该程序实现了前述算法。与其同名程序已经在大部分 UNIX 发行版中消失一样，这种内容编码方式已经被大部分浏览器弃用，部分因为专利问题（这项专利在 2003 年到期）。

`deflate`

采用 zlib 结构（在 RFC 1950 中规定），和 deflate 压缩算法（在 RFC 1951 中规定)。

`br`

表示采用 Brotli 算法的编码方式。

示例
--

### 使用 gzip 方式进行压缩

客户端可以事先声明一系列可以支持的压缩模式，与请求一齐发送。`Accept-Encoding` 这个首部就是用来进行这种内容编码形式协商的：
```

Accept-Encoding: gzip, deflate
```


服务器在 `Content-Encoding` 响应首部提供了实际采用的压缩模式：
```

Content-Encoding: gzip
```


需要注意的是，服务器端并不强制要求一定使用何种压缩模式。采用哪种压缩方式高度依赖于服务器端的设置，及其所采用的模块。

规范
--

| Specification |
| --- |
| HTTP Semantics # field.content-encoding |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Accept-Encoding`
* `Transfer-Encoding`
Forwarded
=========

**`Forwarded`** 首部中包含了代理服务器的客户端的信息，即由于代理服务器在请求路径中的介入而被修改或丢失的信息。

其他可用来替换的，已经成为既成标准的首部是 `X-Forwarded-For` 、 `X-Forwarded-Host` 以及`X-Forwarded-Proto` 。

这个消息首部会被用来进行调试和统计，以及生成基于位置的定制化内容，按照设计的目的，它会暴露一定的隐私和敏感信息，比如客户端的 IP 地址。所以在应用此消息首部的时候，需要将用户的隐私问题考虑在内。

| Header type | Request header |
| --- | --- |
| Forbidden header name | no |

语法
--
```

Forwarded: by=<identifier>; for=<identifier>; host=<host>; proto=<http|https>
```

指令
--

<identifier>

一个 identifier 显示了在使用代理的过程中被修改或者丢失的信息。它们可以是以下几种形式：

* 一个 IP 地址（V4 或 V6，端口号可选，ipv6 地址需要包含在方括号里面，同时用引号括起来），
* 语意不明的标识符（比如 "\_hidden" 或者 "\_secret"）,
* 或者是 "unknown"，当当前信息实体不可知的时候（但是你依然想要说明请求被进行了转发）。

by=<identifier>

该请求进入到代理服务器的接口。

for=<identifier>

发起请求的客户端以及代理链中的一系列的代理服务器。

host=<host>

代理接收到的 `Host` 首部的信息。

proto=<http|https>

表示发起请求时采用的何种协议（通常是 "http" 或者 "https"）。

示例
--

### 使用 `Forwarded`
```

Forwarded: for="_mdn"

# 大小写不敏感
Forwarded: For="[2001:db8:cafe::17]:4711"

# for proto by 之间可用分号分隔
Forwarded: for=192.0.2.60; proto=http; by=203.0.113.43

# 多值可用逗号分隔
Forwarded: for=192.0.2.43, for=198.51.100.17
```

### 从 X-Forwarded-For 到 Forwarded 的迁移

如果应用、服务器或是代理支持标准格式的 Forwarded 的首部的话，那么 `X-Forwarded-For` 可以被替换。需要注意的是，在 Forwarded 中 ipv6 地址需要包含在方括号里面，同时用引号括起来。
```

X-Forwarded-For: 123.34.567.89
Forwarded: for=123.34.567.89

X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17
Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"
```

规范
--

| Specification |
| --- |
| Forwarded HTTP Extension # section-4 |

相关内容
----

* `X-Forwarded-For`
* `X-Forwarded-Host`
* `X-Forwarded-Proto`
* `Via` – 提供代理自身的信息，而非与其相连的客户端信息。
Referer
=======

**`Referer`** 请求头包含了当前请求页面的来源页面的地址，即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 `Referer` 请求头识别访问来源，可能会以此进行统计分析、日志记录以及缓存优化等。

需要注意的是 referer 实际上是 "referrer" 误拼写。参见 HTTP referer on Wikipedia（HTTP referer 在维基百科上的条目）来获取更详细的信息。

**警告：** `Referer` 请求头可能暴露用户的浏览历史，涉及到用户的隐私问题。

在以下两种情况下，`Referer` 不会被发送：

* 来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI；
* 当前请求页面采用的是非安全协议，而来源页面采用的是安全协议（HTTPS）。

| Header type | Request header |
| --- | --- |
| Forbidden header name | yes |

语法
--
```

Referer: <url>
```

指令
--

<url>

当前页面被链接而至的前一页面的绝对路径或者相对路径。不包含 URL fragments (例如 "#section") 和 userinfo (例如 "https://username:password@example.com/foo/bar/" 中的 "username:password" )。

示例
--
```

Referer: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.referer |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* HTTP referer on Wikipedia
* `Referrer-Policy`
Trailer
=======

**Trailer** 是一个响应首部，允许发送方在分块发送的消息后面添加额外的元信息，这些元信息可能是随着消息主体的发送动态生成的，比如消息的完整性校验，消息的数字签名，或者消息经过处理之后的最终状态等。

**备注：** 请求首部 `TE` 需要设置 trailers 来允许挂载字段。


| Header type | Response header |
| --- | --- |
| Forbidden header name | yes |

语法
--
```

Trailer: header-names
```

指令
--

`header-names`

出现在分块信息挂载部分的消息首部。以下首部字段**不允许**出现：

* 用于信息分帧的首部 (例如`Transfer-Encoding` 和 `Content-Length`),
* 用于路由用途的首部 (例如 `Host`)，
* 请求修饰首部 (例如控制类和条件类的，如`Cache-Control`，`Max-Forwards`，或者 `TE`)，
* 身份验证首部 (例如 `Authorization` 或者 `Set-Cookie`)，
* `Content-Encoding`, `Content-Type`, `Content-Range`，以及 `Trailer` 自身。

示例
--

### 在分块传输编码中使用挂载（trailer）首部

在这个例子中，`Expires` 首部出现在分块信息的结尾，作为挂载（trailer）首部。
```

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
Trailer: Expires

7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
Expires: Wed, 21 Oct 2015 07:28:00 GMT\r\n
\r\n
```

规范
--

| Specification |
| --- |
| HTTP Semantics # field.trailer |
| HTTP/1.1 # chunked.trailer.section |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Transfer-Encoding`
* `TE`
* Chunked transfer encoding
Accept-CH-Lifetime
==================

**安全上下文:** 此项功能仅在一些支持的浏览器的安全上下文（HTTPS）中可用。

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

服务器设置 **`Accept-CH-Lifetime`** 标头以指定`Accept-CH`标头值的持久性，该值指定客户端应在后续请求中包括哪些Client Hints (en-US)标头。

| Header type | Response header |
| --- | --- |
| Forbidden header name | ? |

**备注：** Client Hints (en-US)只能在安全源（通过 TLS）上访问。所有安全的请求都应该持久化 Accept-CH 和 Accept-CH-Lifetime 头，以确保Client Hints (en-US)可靠地发送。

语法
--
```

Accept-CH-Lifetime: <age>
```

示例
--
```

Accept-CH: Viewport-Width, DPR
Accept-CH-Lifetime: 86400
```

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Accept-CH`
* `Vary`
Expect-CT
=========

`Expect-CT` 标头允许站点选择性地报告和/或执行证书透明度（Certificate Transparency）要求，来防止错误签发的网站证书的使用不被察觉。

证书透明的要求可以通过以下任意一种方式来满足：

* X.509v3 证书扩展，允许嵌入独立的日志记录的证书签署时间戳（signed certificate timestamp）
* 握手期间发送的 `signed_certificate_timestamp` 类型的 TLS 扩展
* 支持 OCSP 装订（即，`status_request` TLS 扩展）并提供 `SignedCertificateTimestampList`

**备注：** 当站点启用 `Expect-CT` 标头时，会要求浏览器检查当前站点的证书是否出现在**公共证书透明度日志**之中。

**备注：** 浏览器会**忽略** HTTP 连接的 `Expect-CT` 标头；该标头仅在 HTTPS 连接中有效。

**备注：** `Expect-CT` 标头可能会在 2021 年 6 月废弃。从 2018 年 5 月起，新的证书默认支持证书签署时间戳（SCT）。2018 年 3 月之前的证书的有效期为 39 个月，这些证书都会在 2021 年 6 月前过期。


|  |  |
| --- | --- |
| 标头类型 | 响应标头 |
| 禁止修改的标头 | 是 |

语法
--
```

Expect-CT: report-uri="<uri>",
           enforce,
           max-age=<age>
```

指令
--

`max-age`

该指令指定接收到 `Expect-CT` 标头后的秒数，在此期间用户代理应将收到消息的主机视为已知的 `Expect-CT` 主机。

如果缓存接收到的值大于它可以表示的值，或者如果其随后的计算溢出，则缓存将认为该值为 2147483648（2 的 31 次幂）或其可以表示的最大正整数。

`report-uri="<uri>"` 可选

该指令指定用户代理报告 `Expect-CT` 错误的 URI。

当和 `enforce` 指令共同存在时，这种配置被称为“强制执行和报告”配置，示意用户代理既应该强制遵守证书透明度政策，也应当报告违规行为。

`enforce` 可选

该指令示意用户代理应强制遵守证书透明度政策（而不是只报告合规性），并且用户代理应拒绝违反证书透明度政策的之后连接。

当 `enforce` 指令和 `report-uri` 指令共同存在时，这种配置被称为“强制执行和报告”配置，示意用户代理既应该强制遵守证书透明度政策，也应当报告违规行为。

示例
--

以下示例指定在 24 小时内遵守证书透明度政策，并向 `foo.example.com` 报告违规行为。
```

Expect-CT: max-age=86400, enforce, report-uri="https://foo.example.com/report"
```

说明
--

手动添加到信任库的根 CA 会覆盖和禁止 `Expect-CT` 的报告/执行。

除非网站“证明”它可以提供满足证书透明度要求的证书，否则浏览器不会缓存 `Expect-CT` 策略。浏览器实现了自己的信任模型，关于哪些证书应该被信任的信息已被记录到了证书透明度日志中。

对于缓存了的 `Expect-CT` 策略，Chrome 会在缓存的 10 周以后停止对相应策略的强制执行。

规范
--

| Specification |
| --- |
| Expect-CT Extension for HTTP # section-2.1 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Server-Timing
=============

**`Server-Timing`** 标头传达在一个给定请求 - 响应周期中的一个或多个参数和描述。它用于在用户浏览器的开发工具或 `PerformanceServerTiming` (en-US) 接口中显示任何后端服务器定时参数（例如，数据库读/写、CPU 时间、文件系统访问等）。

| Header type | Response header |
| --- | --- |
| Forbidden header name | no |

语法
--

`Server-Timing` 头的语法允许你以不同方式传达参数：仅服务器参数名称，具有值的参数，具有值和描述的度参数以及具有描述的参数。

规范建议名称和描述应尽可能短（使用缩写并在可能的情况下省略可选值）以最小化 HTTP 开销。
```

// Single metric without value
Server-Timing: missedCache

// Single metric with value
Server-Timing: cpu;dur=2.4

// Single metric with description and value
Server-Timing: cache;desc="Cache Read";dur=23.2

// Two metrics with value
Server-Timing: db;dur=53, app;dur=47.2

// Server-Timing as trailer
Trailer: Server-Timing
--- response body ---

Server-Timing: total;dur=123.4
```

保密性与安全性
-------

`Server-Timing` 头可能会暴露潜在的敏感应用程序和基础设备信息。请考虑在服务器端控制何时向谁返回哪些参数信息。例如，你只能向经过身份验证的用户显示参数信息，而不能向公众显示。

PerformanceServerTiming 接口
--------------------------

除了在浏览器的开发工具中显示 `Server-Timing` 外，`PerformanceServerTiming` (en-US) 接口允许工具自动收集和处理 JavaScript 中的参数。此接口仅限于相同的源下使用，但你可以使用 `Timing-Allow-Origin` 头指定允许访问服务器参数的域。该接口仅在某些浏览器中的安全上下文（HTTPS）中可用。

规范
--

| Specification |
| --- |
| Server Timing # the-server-timing-header-field |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

相关内容
----

* `PerformanceServerTiming` (en-US)
Alt-Svc
=======

**`Alt-Svc`** 全称为“Alternative-Service”，直译为“备选服务”。该头部列举了当前站点备选的访问方式列表。一般用于在提供“QUIC”等新兴协议支持的同时，实现向下兼容。

语法
--
```

Alt-Svc: clear
Alt-Svc: <service-list>; ma=<max-age>
Alt-Svc: <service-list>; ma=<max-age>; persist=1
```


`<service-list>`

使用分号隔离的访问方式列表，格式形如：`<service-name>="<host-name>:<port-number>"`。这里的`<service-name>`应当是一个有效的 ALPN 标识符。

`<max-age>`可选

当前访问方式的有效期，超过该时间后，服务端将不保证该访问方式依旧可用，客户端应当重新获取更新后的 Alt-Svc 列表。单位为秒，默认值为 24 小时（86400)。

`persist`可选

可选参数，用于标识当前访问方式在网络环境改变时或者会话间始终保持。

规范
--

| Specification |
| --- |
| HTTP Alternative Services # alt-svc |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

引用
--

* Identifying resources on the Web[在 Web 世界标记资源]
Sec-WebSocket-Accept
====================

**Sec-WebSocket-Accept** 头（header）用在 websocket 开放握手中。它会出现在响应头中。也就是说，这是由服务器发送到客户端的头（header），用以告知服务器愿发起一个 websocket 连接。

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Sec-Fetch-Dest
==============

**`Sec-Fetch-Dest`** Fetch 元数据请求标头指示请求的目标，即数据的来源以及如何使用这些获取到的数据。

这允许服务器根据请求是否采用了适当的使用方式来确定是否为请求提供服务。例如，具有 `audio` 目标的请求应请求音频数据，而不是其他类型的资源（例如，包含敏感用户信息的文档）。

|  |  |
| --- | --- |
| 标头类型 | Fetch 元数据请求标头 |
| 禁止修改的消息首部 | 是（带有 `Sec-` 前缀） |
| CORS-safelisted request header (en-US) | 否 |

语法
--
```

Sec-Fetch-Dest: audio
Sec-Fetch-Dest: audioworklet
Sec-Fetch-Dest: document
Sec-Fetch-Dest: embed
Sec-Fetch-Dest: empty
Sec-Fetch-Dest: font
Sec-Fetch-Dest: frame
Sec-Fetch-Dest: iframe
Sec-Fetch-Dest: image
Sec-Fetch-Dest: manifest
Sec-Fetch-Dest: object
Sec-Fetch-Dest: paintworklet
Sec-Fetch-Dest: report
Sec-Fetch-Dest: script
Sec-Fetch-Dest: serviceworker
Sec-Fetch-Dest: sharedworker
Sec-Fetch-Dest: style
Sec-Fetch-Dest: track
Sec-Fetch-Dest: video
Sec-Fetch-Dest: worker
Sec-Fetch-Dest: xslt
```


如果此标头包含任何其他的值，服务器应忽略它。

指令
--

**备注：** 这些指令对应于 `Request.destination` (en-US) 返回的值。

`audio`

目标是音频数据。这可能源自 HTML `<audio>` 标签。

`audioworklet`

目标是获取供 audio worklet 使用的数据。这可能源于对 `audioWorklet.addModule()` (en-US) 的调用。

`document`

目标是文档（HTML 或 XML），请求是用户发起的顶级导航的结果（例如，由用户单击链接产生）。

`embed`

目标是嵌入内容。这可能源自 HTML `<embed>` 标签。

`empty`

目标是空字符串。这用于没有自己值的目标。例如：`fetch()`、`navigator.sendBeacon()`、`EventSource`、`XMLHttpRequest`、`WebSocket` 等等。

`font`

目标是字体。这可能源自 CSS `@font-face`。

`frame`

目标是 frame。这可能源自 HTML `<frame>` 标签。

`iframe`

目标是 iframe。这可能源自 HTML `<iframe>` 标签。

`image`

目标是图片。这可能源自 HTML `<image>`、SVG `<image>`、CSS `background-image`、CSS `cursor`、CSS `list-style-image` 等等。

`manifest`

目标是 mainfest。这可能源自 HTML <link rel=manifest> (en-US)。

`object`

目标是对象，这可能源自 `<object>` 标签。

`paintworklet`

目标是 paint worklet。这可能源自对 `CSS.PaintWorklet.addModule()` (en-US) 的调用。

`report`

目标是报告（如一份内容安全策略报告）。

`script`

目标是一个脚本。这可能源自 HTML `<script>` 标签或对 `WorkerGlobalScope.importScripts()` 的调用。

`serviceworker`

目标是 service worker。这可能源于对 `navigator.serviceWorker.register()` 的调用。

`sharedworker`

目标是 shared worker。这可能源自 `SharedWorker`。

`style`

目标是 style。这可能源自 HTML <link rel=stylesheet> 或者 CSS `@import`。

`track`

目标是 HTML text track。这可能源自 HTML `<track>` 标签。

`video`

目标是视频数据。这可能源自于 `<video>` 标签。

`worker`

目标是 `Worker`。

`xslt`

目标是 XSLT 转换。

示例
--

`<img>` 元素生成的跨域请求将具有以下的 HTTP 请求标头（请注意，目标是 `image`）：
```

Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site
```

规范
--

| Specification |
| --- |
| Fetch Metadata Request Headers # sec-fetch-dest-header |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 相关的标头
    + `Sec-Fetch-Mode`
    + `Sec-Fetch-Site`
    + `Sec-Fetch-User`
* 使用 Fetch 元数据使你的资源免受 Web 攻击 (web.dev)
* Fetch 元数据请求标头 playground (secmetadata.appspot.com)