用户代理缩减源试用

用户代理减少旨在减少被动数字“指纹”收集,方法是将用户代理 (UA) 字符串中的信息仅减少为浏览器的品牌和重要版本、其桌面设备与移动设备的区别以及所运行平台的平台。目前,UA 字符串会针对每个 HTTP 请求共享,并通过 JavaScript 向浏览器加载的所有资源公开。它包含有关浏览器、运行平台及其功能的重要信息。用户代理客户端提示 (UA-CH) 可提供与完整 UA 字符串相同的信息,但允许网站仅请求所需的 UA 信息。

Chrome 95 Beta 版开始,我们将开放用户代理缩减源试用,以允许网站选择接收经过简化的 UA 字符串。这样,网站就能够在减少 UA 成为 Chrome 中的默认行为之前发现并解决问题(我们计划于 2022 年第二季度开始减少)。如果您希望在面向稳定用户群发布之前面向 95 Beta 版用户测试源试用,请务必在 Chrome 95(目前计划于 2021 年 10 月 19 日)发布日期之前选择加入测试并进行测试。

下面概述了源试用及其预期。与往常一样,欢迎您在试用期间提供反馈或遇到任何问题,欢迎通过 UA 缩减 GitHub 代码库提交反馈。

什么是用户代理?

用户代理 (UA) 字符串会在每个 HTTP 请求中共享,并通过 JavaScript 向浏览器加载的所有资源公开。目前,它包含有关浏览器及其运行平台的重要信息。

为什么用户代理会减少?

用户代理缩减功能最初于 2020 年 1 月首次发布,旨在减少 Chrome 浏览器中的被动数字“指纹”收集面。通过将 UA 字符串中的信息缩减为仅浏览器的品牌和重要版本、其桌面设备/移动设备的区别以及它所运行的平台,将更加难以识别单个用户。

这对 Web 开发者有什么影响?

网站应做好准备,以便接收减少的 UA 字符串,并考虑参与源试用(详见下文)。缩减的用户代理值将显示在以下位置:

  • User-Agent HTTP 请求标头
  • navigator.userAgent JavaScript getter
  • navigator.platform JavaScript getter
  • navigator.appVersion JavaScript getter

如果希望接收的客户端信息多于缩减用户代理分享的内容,网站需要迁移到新的 User-Agent Client Hints API。如需详细了解迁移策略,请参阅迁移到用户代理客户端提示

用户代理缩减计划目前不包含 iOS 和 WebView,因此这些平台将继续获取完整的用户代理字符串。主要原因是这些平台尚未实现用户代理客户端提示

此源试用是如何运作的?

此源试用与标准源试用略有不同。标准源试用只能控制响应中的行为(例如,在响应的 JavaScript 中控制对 API 的访问权限)。在此试用中,我们的目标是不仅修改 JavaScript API 中提供的 UA 字符串,还要修改通过 HTTP 请求发送的用户代理标头。

为了做到这一点,我们将定义一个名为 Sec-CH-UA-Reduced 的临时客户端提示,如果请求中存在该提示,则表明 User-Agent 标头值包含缩减的 UA 字符串。仅当源试用令牌有效时,系统才会发送 Sec-CH-UA-Reduced 客户端提示(以及经过缩减的 UA 字符串),在源试用过期后 Sec-CH-UA-Reduced 客户端提示将失效。请注意,除非您设置 Critical-CH header,否则第一个导航请求仍会接收未简化的用户代理字符串。

向同一来源发出的子资源请求会自动发送与所发送的顶级请求相同的用户代理字符串。向第三方源发出的子资源请求还会发送与顶级请求相同的用户代理字符串(如果源试用令牌有效,包括简化的 UA 字符串),但前提是权限政策允许。

如何参与用户代理缩减源试用?

  1. 如需注册参加源试用并获取网域令牌,请访问“试用用户代理数量减少”页面

  2. 更新您的 HTTP 响应标头:

    1. Origin-Trial: <ORIGIN TRIAL TOKEN> 添加到 HTTP 响应标头,其中 <ORIGIN TRIAL TOKEN> 包含您在注册源试用时获得的令牌。
    2. Accept-CH: Sec-CH-UA-Reduced 添加到 HTTP 响应标头。
    3. 设置 Accept-CH 只会在对源的后续请求时发送缩减的用户代理字符串;若要使用缩减的用户代理字符串重新发送第一个导航请求,除了 Accept-CHOrigin-Trial 标头之外,还需将 Critical-CH: Sec-CH-UA-Reduced 添加到 HTTP 响应标头中。
    4. 注意:如果响应标头包含有效的 Origin-Trial 令牌和 Accept-CH: Sec-CH-UA-Reduced,则所有子资源请求(例如图片或样式表)和子导航请求(例如 iframe)都将发送简化的 UA 字符串,即使这些请求的来源未注册源试用也是如此。
  3. 在 Chrome M95(或更高版本)中加载您的网站,并开始接收缩减的 UA 字符串。

  4. 如有任何问题或反馈,请提交至 UA 缩减 GitHub 代码库

  5. 如需查看简单的源试用演示(以及源代码),请访问 https://uar-ot.glitch.me/

如何以第三方嵌入代码参与源试用?

从 Chrome 96 开始,第三方嵌入内容(例如其他网站中的 iframe)可以参与源试用,而无需注册顶级网站。

如需作为第三方嵌入代码进行注册,请执行以下操作:

  1. 请访问用户代理缩减试用,然后点击注册
  2. 创建令牌时,请务必选中 Third-party matching 复选框。
  3. 如需从第三方嵌入接收缩减的用户代理标头,请更新 HTTP 响应标头
  4. 如需在 JavaScript API 中接收经过缩减的用户代理字符串,必须通过 JavaScript 注入试用令牌。

关于在第三方嵌入内容上运行源试用的一些要点:+ 无法为第三方嵌入指定 Critical-CH,因此,第一次导航不会发送缩减后的 UA 字符串,但第三方嵌入的子资源请求会发送缩减后的 UA 字符串。 + 如果源试用针对第三方嵌入的来源进行了验证,那么针对顶级导航中的同一来源的后续请求将发送缩减的 UA 字符串。因此,我们建议您提高针对顶级请求和嵌入请求的源试用的参与人数。 + 如果用户代理已停用第三方 Cookie,源试用将不适用于第三方嵌入请求中的 User-Agent 标头,但 JavaScript API 仍会获取缩减的 UA 字符串。

如何验证源试用是否正常运行?

如需验证源试用是否正常运行,请检查请求标头并确保以下几点:

  1. User-Agent 标头包含简化的版本。请参阅此缩减 UA 字符串示例列表。要想轻松判断 Chrome 次要版本字符串是否包含 0.0.0
  2. Sec-CH-UA-Reduced 标头设置为 ?1

包含源试用令牌的初始响应标头应如下所示:

包含源试验令牌的初始响应的标头。

包含缩减 UA 字符串的后续请求标头应如下所示:

后续请求标头包含缩减的 UA 字符串。

如何停止参与用户代理缩减源试用计划?

在试用期间,您可以随时停止参与并接收完整的用户代理字符串。要停止参与,请执行以下操作:

  1. 在 HTTP 响应中发送不包含 Sec-CH-UA-ReducedAccept-CH 标头。注意:如果您的网站未请求任何其他 Client Hints,Accept-CH 的值为空是实现此目的的有效方法。
  2. 从 HTTP 响应中移除“User-Agent Reduction”试验的 Origin-Trial 标头。
  3. 如果设置了 Sec-CH-UA-Reduced,则从 HTTP 响应的 Critical-CH 标头中移除 Sec-CH-UA-Reduced

源试用会持续多长时间?

UA 减少源试用将持续至少 6 个月,相当于大约 6 个 Chrome 里程碑。源试用将在 M95 中显示,并在 M101 结束。届时,Chrome 会先评估源试用的反馈,然后再根据发布计划分阶段发送经过缩减的用户代理字符串。如果网站需要更长时间,他们可以选择参与后续的弃用源试用,这样至少再过 6 个月就可以使用完整的 UA 字符串。当弃用试用准备就绪后,我们会发布更多详细信息。

如何分享有关用户代理缩减源试用的反馈?

如有任何问题或反馈,请提交至 UA 缩减 GitHub 代码库