Signed HTTP Exchange

Kinuko Yasuda

Signed HTTP Exchange(简称“SXG”)是新兴技术 Web Packages 的子集,可让发布商安全地将其内容变为可移植内容,即可供其他方重新分发,同时仍保持内容的完整性和提供方说明。便携式内容具有诸多优势,从加快内容分发速度,到方便用户之间分享内容,再到更简单的离线体验,不一而足。

那么,Signed HTTP Exchange 的工作原理是什么?借助此技术,发布者可以对单个 HTTP 交换(即请求/响应对)进行签名,以便从任何缓存服务器提供 Signed Exchange。当浏览器加载此 Signed Exchange 时,它可以安全地在地址栏中显示发布者的网址,因为交换中的签名足以证明内容最初来自发布者的来源。

Signed Exchange:要点

这会将内容的出处与内容分发者分离开来。您可以将内容发布到网络上,而无需依赖于特定的服务器、连接或托管服务!我们很高兴看到 SXG 的可能用途,例如:

  • 可保护隐私的预提取:虽然为后续导航预提取资源(例如,通过 link rel=prefetch)可加快导航速度,但也会带来隐私方面的缺陷。例如,为跨源导航预提取资源会向目标网站披露,即使用户最终并未访问某条信息,用户也可能对某条信息感兴趣。另一方面,SXG 允许从快速缓存预提取跨源资源,而无需发送到目标网站,因此仅在导航发生时传达用户兴趣。我们认为,这对于希望将用户转到其他网站的网站非常有用。具体而言,Google 计划在 Google 搜索结果页中使用此功能来改进 AMP 网址并加快搜索结果的点击速度。

  • 在不使用证书私钥的情况下使用 CDN 的优势:内容突然变得热门(例如,从 reddit.com 首页链接到的内容)通常会使内容所在的网站过载,而如果网站相对较小,则速度往往会变慢甚至暂时不可用。如果使用快速、强大的缓存服务器共享内容,则可以避免这种情况,并且 SXG 可以在不共享您的 TLS 密钥的情况下实现这一点。

试用 Signed Exchange

Signed Exchange 在 Chrome 73 及更高版本中提供,以前作为源试用提供。

创建 SXG

如需为您的源站(作为发布者)创建 SXG,您需要一个证书密钥来对签名进行签名,并且该证书必须具有特殊的“CanSignHttpExchanges”扩展才能作为有效的 SXG 进行处理。自 2018 年 11 月起,DigiCert 是唯一支持此扩展的 CA,您可以从此页面请求适用于 SXG 的证书。

获得 SXG 的证书后,您可以使用 GitHub 上发布的参考生成器工具创建自己的 SXG。

您还可以在 Chrome 代码库中查看实际的 SXG 示例文件(例如,此文件是为简单文本文件创建的最简单的文件)。请注意,它们主要用于本地测试,签名中不要包含有效证书和时间戳。

在本地测试功能

若要创建用于测试的 SXG,您可以创建自签名证书并启用 chrome://flags/#allow-sxg-certs-without-extension,以便让 Chrome 处理使用证书创建的 SXG(无需特殊扩展程序)。

如果您的服务器、证书和 SXG 设置正确,如下代码应该可以正常工作:

<!-- prefetch the sample.sxg -->
<link rel="prefetch" href="https://your-site.com/sample.sxg" />

<!-- clicking the link below should make Chrome navigate to the inner
     response of sample.sxg (and the prefetched SXG is used) -->
<a href="https://your-site.com/sample.sxg">Sample</a>

请注意,在 Chrome 73 及更高版本中,仅锚标记 (<a>) 和 link rel=prefetch 支持 SXG。另请注意,每个规范的签名有效期限制为 7 天,因此您的签名内容会相对较快地过期。

提供反馈

我们热切希望收到您对此实验的反馈,网址为 webpackage-dev@chromium.org。您还可以参与规范讨论,或向我们的团队报告 Chrome bug。您的反馈将对标准化流程大有帮助,还可以帮助我们解决实现问题。

反馈