Chrome 中的专用预提取代理

Katie Hempenius
Katie Hempenius
Kenji Baheux
Kenji Baheux
Michael Buettner
Michael Buettner

通过跨网站预提取加快 Largest Contentful Paint (LCP)。

从 Android 版 Chrome 103 开始,Chrome 将逐步推出专用预提取代理功能,将 Google 搜索和其他参与网站的导航速度加快 30%(处于中间值)。此专用预提取代理功能允许预提取跨源内容,而无需将用户信息公开给目标网站,直到用户进入网站为止。

请继续阅读下文,了解此功能的工作原理以及它如何帮助您大幅提升网站排名Largest Contentful Paint (LCP),即引荐网站如何通过加快跨网站导航速度来帮助他们的用户实现目标。

专用预提取代理的工作原理

安全信道

此功能使用 CONNECT 代理在 Chrome 和托管要预提取内容的服务器之间建立安全通信通道。这种安全通信通道可防止代理检查任何数据传输。值得注意的是,虽然专用预提取代理必须看到主机名才能建立安全通信通道,但它看不到完整的网址和资源本身。

<ph type="x-smartling-placeholder">
</ph> 显示数据通过代理流动的动画。
通过 CONNECT 代理预提取网站可防止用户信息泄露。

此外,由于安全通信通道是端到端加密的,因此中间方既不能观察主机名,也不能观察预提取网站的内容。最后,代理本身会阻止目标服务器查看用户的 IP 地址。

阻止用户识别

除了前面详述的网络方面外,我们还需要防止服务器在预提取时通过用户设备上之前存储的信息来识别用户。为此,Chrome 目前仅允许在用户没有 Cookie 或其他本地状态的网站上使用专用预提取代理。对于通过专用预提取代理发出的预提取请求,存在以下限制:

  • Cookie:预提取请求不得携带 Cookie。
    • 如果存在资源的 Cookie,Chrome 将进行未经凭据的提取,但不会使用响应(请参阅后面的缓存部分)。
    • 虽然对预提取请求的响应可以包含 Cookie,但只有当用户转到预提取的网页时,系统才会保存这些 Cookie。
  • 数字“指纹”收集:系统还会调整其他可用于数字“指纹”收集的界面。例如,预提取代理发送的 User-Agent 标头仅携带有限的信息。

将来,我们希望将专用预提取代理扩展至使用 Cookie 或本地状态的链接,同时保持相同的隐私特征。如需了解详情,请参阅后续步骤部分。

缓存

即使资源已经位于缓存中,Chrome 也会预提取资源,但这些资源不会带有任何条件标头,例如 ETagIf-Modified-Since(这些标头包含服务器设置的值,即使没有 Cookie,也可用于跟踪)。这种预提取是为了防止客户端的缓存状态泄露给预提取的网站。此外,仅当用户决定转到预提取的网站时,Chrome 才会将预提取的资源提交到缓存。

专用预提取代理使用入门

面向网站所有者

对于用户没有 Cookie 或本地状态的链接,网站所有者无需采取任何措施,即可开始从专用预提取代理中获益。根据我们的实验,对于大多数网站来说,这是一个重大机会。此外,利用超快的加载体验吸引初访者或不常访问的访问者始终是不错的选择。在以往的实验中,我们发现 Largest Contentful Paint 在预提取导航上的运行速度提高了 20% 到 30%。

将来,我们希望将此功能扩展到使用 Cookie 或本地状态的链接,同时保持其隐私特性。Cookie 的难点在于,它们可能会被用于以难以预测的方式改变用户体验。因此,网站所有者很可能需要选择启用或调整其网站,才能从使用 Cookie 链接的专用预提取代理中获益。

具体而言,虽然预提取请求将保持没有凭据,但当用户导航到该网页时,该网页将获得对 Cookie 和其他本地状态的访问权限。开发者可以借此重新添加基于 Cookie 或本地状态的个性化和更改。或者,开发者可能还希望将某些资源声明为完全可以在没有 Cookie 的情况下预提取和使用(即不依赖于任何 Cookie 的资源)。请参阅后续步骤部分,了解详情并制定计划。

与地理位置相关的内容或服务

如果您的网站在不同市场中的行为有所不同(例如,内容不同或选择性访问),会根据用户的 IP 地址而有所不同,那么您可能想知道如何处理专用预提取代理的预提取请求。请务必注意,专用预提取代理由遍布全球的多台服务器提供支持,并且该代理的 IP 将地理定位到用户发起预提取时所在的国家/地区。

因此,考虑到这点,我们的建议如下:

  1. 通过是否存在 Sec-Purpose: Prefetch; anonymous-client-ip HTTP 标头,识别来自专用预提取代理的预提取请求。
  2. 查找通过 IP 地址发出请求的专用预提取代理的地理位置。如需查看已发布地理位置和相应 IP 地址的最新列表,请参阅此资源
  3. 根据与此特定地理位置关联的市场提供资源。

流量控制

根据以往的实验,我们知道,使用此功能通常会导致对主要资源(例如 HTML 文档)的额外请求不超过 2%。也就是说,如果您谨慎行事,则可以使用流量建议的分数字段来控制专用预提取代理应允许的流量。您可以先从较小的比例(例如 0.3,即 30%)开始,然后将以下 JSON 添加到 /.well-known/traffic-advice 文件(需要使用 application/trafficadvice+json MIME 类型传送),逐步将其提高到 1.0(即 100%):

[{
  "user_agent": "prefetch-proxy",
  "fraction": 0.3
}]

fraction 字段是介于 0.0(完全不预提取)和 1.0(100% 的预提取请求通过)之间的浮点数。

您也可以使用以下配置完全停用此功能:

[{
  "user_agent": "prefetch-proxy",
  "disallow": true
}]

/.well-known/traffic-advice 文件由代理(而非客户端)提取,并按照常规的 HTTP 缓存语义在代理中进行缓存。为了提高灵活性(例如,突然达到高访问量),您可能需要暂时拒绝带有 503 状态代码的预提取请求 (Sec-Purpose: prefetch;anonymous-client-ip),并在响应中设置 Cache-Control: no-store 标头。您还可以添加 Retry-After 标头,以告知 Chrome 重试预提取请求前的等待时间。

适用于引荐网站所有者

如果您运营的网站包含大量指向其他网站的链接,您可能会对使用专用预提取代理功能加快这些跨源导航速度感兴趣。您需要向自己的网页添加推测规则,以便 Chrome 了解您认为应通过专用预提取代理预提取哪个网页。下面是一个简单的示例:

<script type="speculationrules">
{
  "prefetch": [
    "source": "list",
    "urls": ["https://example.com/index.html"],
    "requires": ["anonymous-client-ip-when-cross-origin"]
  ]
}
</script>

后续操作

此次发布只是第一步。我们希望根据社区的兴趣和反馈扩展和改进此功能。例如,我们非常希望收到反馈,了解如何扩展到包含 Cookie 和本地状态的链接以尽可能减少开发者的不便,或者如何使此功能对引荐网站更有用。

了解详情