Chrome 会继续减少在其用户代理字符串中分享的信息,以帮助保护用户的隐私。
自 Chrome 110(2023 年 2 月)起,我们将逐步推出 Android 版本和设备型号的固定值,即型号 K
的默认值将始终为 Android 10
。
如果您依靠用户代理检测访问者的操作系统版本、Android 设备型号或详细的浏览器版本,那么您可能需要采取措施(详情请见下文)。
user-agent(用户代理)是一个字符串,可提供有关用户浏览器及其环境的信息,例如获知您网站的访问者在 Android 设备上运行的是 Chrome 110 版本。 您的浏览器在 HTTP 标头中发送此请求,并通过 JavaScript 提供此标头。
完整的用户代理字符串存在的问题是,默认情况下,它在每次请求时都会分享有关浏览器的详细信息,这是允许跨网站跟踪的一个主要因素。 我们的目标是减少被动收集这些数据的机会,同时提供 API,让您能够在需要时主动访问数据。
到目前为止减少了用户代理
我们已经开始删除一些默认提供的用户代理数据,并用固定值取而代之。
从 Chrome 101 开始,我们将次要版本号替换为零,例如Chrome/101.3.2.1 已变为 Chrome/101.0.0.0。
从 Chrome 107 开始,我们将桌面设备操作系统版本和 CPU 信息替换为平台的固定值。
Mac | ➡ | Macintosh;Intel Mac OS X 10_15_7 |
Windows | ➡ | Windows NT 10.0;Win64;x64 |
ChromeOS | ➡ | X11;CrOS x86_64 14541.0.0 |
Linux | ➡ | X11;Linux x86_64 |
修复了从 Chrome 110 开始的 Android 版本和设备型号
从 Chrome 110 开始,我们会逐步推出针对 Android 版本和设备型号的固定值。
而不会在 Pixel 7
中看到类似 Android 13
的内容,而模型 K
上的默认值将始终为 Android 10
。
Mozilla/5.0(Linux;Android 13;Pixel 7)AppleWebKit/537.36(KHTML,例如 Gecko)Chrome/95.0.0.0 Mobile Safari/537.36
Mozilla/5.0(Linux;Android 10;K)AppleWebKit/537.36(KHTML,例如 Gecko)Chrome/95.0.0.0 Mobile Safari/537.36
用户代理格式没有变化
用户代理缩减会更改用户代理中返回的值,但格式保持不变。 如果您只使用用户代理读取操作系统类型或主要浏览器版本,相关数据将会像以前一样继续更新,而您无需执行任何操作。

用户代理的替代方案
如果您目前使用的确实是更详细的数据,建议您最好确认一下是否可以使用渐进式增强功能或功能检测。
请务必谨记,用户代理与其他任何用户提供的值一样 - 您应该对其进行验证,而不是假定该值准确无误。 用户、扩展程序或其他客户端可以轻松更改用户代理值,或者根本不会发送。 在大多数情况下,您应该能够在没有用户代理数据的情况下向访问者传送有效内容。
使用用户代理客户端提示请求详细数据
访问详细的用户代理数据的原因有很多,例如提供设备特定内容、防欺诈功能或精细的日志记录。 如果您确实需要更详细的数据,可以使用 User-Agent Client Hints (UA-CH) API 来访问。 与 user-agent 类似,UA-CH 也可通过 HTTP 标头或 JavaScript 获取。
您可能已经看到了,默认标头使用 Sec-CH-UA-
前缀发送,这些前缀可以告诉您浏览器、主要版本、操作系统以及浏览器是否为移动设备。
⏫ 来自 Chrome 的默认用户代理客户端提示请求标头:
Sec-CH-UA: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"
您可以在响应中使用 Accept-CH
标头来要求提供更多数据。
在这种情况下,您可以请求 Sec-CH-UA-Platform-Version
和 Sec-CH-UA-Model
,以在后续请求中返回相应的 Android 版本和设备类型。
⏬ 来自服务器的响应标头(用于指定平台版本和型号):
Accept-CH:
Sec-CH-UA-Platform-Version,
Sec-CH-UA-Model
⏫ 从 Chrome 请求返回的标头(包括 Android 版本和型号名称):
Sec-CH-UA-Platform-Version: "13.0.0"
Sec-CH-UA-Model: "Pixel 7"
在 JavaScript 中,您可以通过对 userAgentData
API 调用 getHighEntropyValues()
并传入所需值(platformVersion
和 model
)数组来执行相同的操作。
这将返回一个 promise,其中包含包含特定值的对象。
navigator.userAgentData
.getHighEntropyValues(
['platformVersion', 'model']
).then(ua => { console.log(ua)
});
{
"platformVersion": "13.0.0",
"model": "Pixel 7"
}
跨源或初始请求
如果您的网页上有跨源资源需要这些值,您可以通过 Permissions-Policy
HTTP 标头或在 HTML 中使用 Delegate-CH
元标记允许访问。
如果您的网站有必要在第一个顶级请求中包含这些敏感值,则可以使用 Critical-CH
HTTP 标头,它会告知浏览器添加这些额外提示后重试其初始请求。
这对于难以更新的旧系统可能很有用,但理想情况下,您不应依赖这些敏感值来提供初始 HTML。
了解详情
要了解经过缩减的用户代理字符串的实际应用,请查看以下内容:
- 请访问 goo.gle/reduced-ua-demo,查看适用于您设备的简化用户代理字符串
- 请访问 goo.gle/ua-ch-demo 查看适用于您设备的所有 JavaScript 和 HTTP 标头用户代理客户端提示
- 启用
#reduce-user-agent
Chrome flag,在您的浏览器中发送经过缩减的用户代理字符串。
您仍然可以注册参与“用户代理缩减源站的试用”,以便在您的网站上获得缩减版用户代理。不过,我们将在 3 月初结束此试用,因为我们会继续逐步扩大默认发送缩减版用户代理的期限。
我们在用户代理缩减着陆页上提供了更多资源,您也可以在我们专用的 user-agent-reduction GitHub 代码库中提交问题。