Signed HTTP Exchange

安田纪子

Signed HTTP Exchange(或“SXG”)是称为网站软件包的新兴技术的一部分,利用该技术,发布商可以安全地使其内容可移植,即可供其他方重新分发,同时仍然保持内容的完整性和出处。从加快内容分发速度到方便用户之间共享内容,再到更简单的离线体验,便携式内容具有诸多优势。

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

Signed Exchange:基础知识

这样可将内容的来源与分发者分离开来。您的内容可以发布到网络上,而无需依赖特定的服务器、连接或托管服务!我们对 SXG 的潜在用途感到非常兴奋,例如:

  • 可保护隐私的预提取:虽然为后续导航预提取资源(例如 by 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。您的反馈将大大帮助标准化过程,并帮助我们解决实现问题。

反馈