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 版本和设备型号值。在模型 K
上,默认值将始终为 Android 10
,而不是 Pixel 7
上的 Android 13
之类的内容。
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
用户代理格式保持不变
缩减用户代理会更改用户代理中返回的值,但格式保持不变。 如果您仅使用用户代理来读取操作系统类型或主要浏览器版本,则这些数据将继续像以前一样更新,您无需采取任何措施。

用户代理的替代方案
如果您目前使用的是更详细的数据,不妨检查是否可以改为使用渐进增强或功能检测。
请务必注意,user-agent 与任何其他用户提供的值一样,您应对其进行验证,而不是假定其准确无误。 用户代理值可以由用户、扩展程序、其他客户端轻松更改,或者根本不发送。在大多数情况下,您应该能够向没有用户代理数据的访问者提供正常的内容。
使用用户代理客户端提示请求详细数据
有许多正当理由可以访问详细的用户代理数据,例如提供特定于设备的内容、防欺诈功能或精细的日志记录。 如果您确实需要更详细的数据,可以使用 User-Agent Client Hints (UA-CH) API 来访问这些数据。与用户代理一样,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
- 如需查看您的设备的所有 JavaScript 和 HTTP 标头 User-Agent 客户端提示,请访问 goo.gle/ua-ch-demo
- 通过启用
#reduce-user-agent
Chrome 标志,在您的浏览器中发送经过缩减的用户代理字符串。
您仍然可以注册用户代理字符串缩减源试用,以便在您的网站上接收经过缩减的用户代理字符串,但我们将于 3 月初结束此试用,因为我们会继续逐步增加默认发送经过缩减的用户代理字符串。
您可以在“用户代理缩减”着陆页上找到更多资源,还可以在我们的专用 user-agent-reduction GitHub 代码库中提出问题。