103 早期提示
HTTP 的 103 Early Hints
信息响应 可以由服务器在准备响应时发送,其中包含关于服务器预期最终响应将链接到的站点和资源的提示。这允许浏览器在服务器准备并发送最终响应之前 预连接 到站点或开始 预加载 资源。由早期提示指示的预加载资源将在收到提示后立即由客户端获取。
早期提示响应主要用于与 Link
标头一起使用,该标头指示要加载的资源。它可能还包含一个 Content-Security-Policy
标头,该标头在处理早期提示时强制执行。
服务器可能会发送多个 103
响应,例如,在重定向之后。浏览器只处理第一个早期提示响应,如果请求导致跨域重定向,则必须丢弃此响应。
注意:出于兼容性和安全原因,建议 [仅通过 HTTP/2 或更高版本发送 HTTP 103 Early Hints
响应]((https://www.rfc-editor.org/rfc/rfc8297#section-3),除非已知客户端可以正确处理信息响应。
出于这个原因,大多数浏览器将支持限制为 HTTP/2 或更高版本。请参阅下面的 浏览器兼容性。尽管如此,以下示例使用 HTTP/1.1 样式表示法,这与通常的约定一致。
语法
103 Early Hints
示例
预连接示例
以下 103
早期提示响应显示了一个早期提示响应,其中服务器指示客户端可能希望预连接到特定来源 (https://cdn.example.com
)。就像 HTML 的 rel=preconnect
属性一样,这是一个提示,表示该页面很可能需要来自目标资源来源的资源,并且浏览器可以通过抢先启动与该来源的连接来改善用户体验。
103 Early Hint
Link: <https://cdn.example.com>; rel=preconnect, <https://cdn.example.com>; rel=preconnect; crossorigin
此示例预连接到 https://cdn.example.com
两次
- 第一个连接将用于加载可以无需 CORS 获取的资源,例如图像。
- 第二个连接包含
crossorigin
属性,并将用于加载 CORS 受保护的资源,例如字体。
CORS 受保护的资源必须通过完全独立的连接获取。如果只需要来自一个来源的一种类型的资源,则只需预连接一次。
随后,服务器发送最终响应。这包括一个跨域字体预加载和一个从附加来源加载的 <img>
。
200 OK
Content-Type: text/html
<!DOCTYPE html>
...
<link rel="preload" href="https://cdn.example.com/fonts/myfont.woff2" as="font" type="font/woff2" crossorigin>
...
<img src="https://cdn.example.com/images/image.jpg" alt="">
...
预加载示例
以下 103
早期提示响应指示最终响应可能需要样式表 style.css
。
103 Early Hint
Link: </style.css>; rel=preload; as=style
随后,服务器发送最终响应。这包括一个指向样式表的链接,该链接可能已经从早期提示中预加载。
200 OK
Content-Type: text/html
<!DOCTYPE html>
...
<link rel="stylesheet" rel="preload" href="style.css" />
...
包含 CSP 的早期提示响应
以下示例显示了相同的早期提示响应,但包含 Content-Security-Policy
标头。
103 Early Hint
Content-Security-Policy: style-src: self;
Link: </style.css>; rel=preload; as=style
早期响应将预加载限制为与请求相同的来源。如果来源匹配,则将预加载样式表。
最终响应可能会将 CSP 设置为 none
,如下所示。样式表已经预加载,但在渲染页面时不会使用。
200 OK
Content-Security-Policy: style-src: none;
Content-Type: text/html
<!DOCTYPE html>
...
<link rel="stylesheet" rel="preload" href="style.css" />
...
规范
规范 |
---|
指示提示的 HTTP 状态代码 # early-hints |
HTML 标准 # early-hints |
浏览器兼容性
BCD 表格仅在浏览器中加载