返回博客

User-Agent 冻结之后,为什么 Client Hints 才是新指纹信号?一文讲清 UA 到 CH 的演进

浏览器厂商收紧隐私,User-Agent 被逐步冻结,Client Hints 成为新的高熵指纹信号。本文讲清 UA Reduction、Client Hints 原理、指纹一致性为什么重要,以及多账号环境管理如何让 UA、CH、系统参数保持自洽。

过去几年,主流浏览器不约而同地收紧隐私策略:Safari 上线 ITP、Firefox 推出 Total Cookie Protection、Chrome 正式推进 User-Agent 冻结(UA Reduction)。很多人到现在还在"改个 UA"就觉得能伪装设备,却不知道 UA 已经被大幅简化、逐渐失去细节信息——真正接棒成为设备识别关键信号的,是 Client Hints(CH)

这篇文章不教任何"绕过检测"的手段,只从技术原理出发,把三件事讲清楚:UA 为什么要冻结?Client Hints 到底是什么、为什么它是高熵指纹信号?所谓"指纹一致性"为什么才是关键?这能帮你理解现代浏览器环境管理(尤其做多账号隔离时)为什么要把参数当成一个整体来配,而不是零散地填几个字段。

一、UA 字符串为什么会"不够用"?

很长一段时间里,User-Agent 是网站识别浏览器和设备的最主要依据——它会暴露浏览器品牌、版本、操作系统、设备架构等信息。但 UA 字符串太长、太稳定,容易被拿去给用户打指纹,所以 Chrome 明确宣布要逐步简化 UA:只保留最基础的大版本号,把更多"细节能力"迁移到新机制里,这就是 Client Hints。

UA 冻结带来的直接后果是:光伪造一个 UA,已经骗不过去。系统不再只信 UA,而是会去看 UA 之外的那些字段是否和 UA 对得上。最典型的"穿帮"信号就是参数互相矛盾,例如:

  • UA 写的是 macOS 14,但平台版本字段却是 macOS 13;
  • UA 声明是移动设备,但移动端标记仍是 ?0
  • 硬件架构显示 arm64,但 navigator.hardwareConcurrency 之类的值看起来像 x86。

这类矛盾,在设备识别体系里几乎一眼就能判定为"这不是一台真实的设备"。理解了这一点,就明白为什么"只改 UA"在 UA 冻结时代已经行不通了。

二、Client Hints 是什么?为什么说它是高熵指纹

浏览器通过 Client Hints 从低熵信息到服务器请求高熵信息并进行一致性校验的流程图

Client Hints(客户端提示,简称 CH)是浏览器在 HTTP 请求或 JS 环境中按需向服务器透露的一组设备能力信息。它和 UA 最大的不同在于两点:

  1. 包含高熵字段(High Entropy Values)。 所谓高熵,是指这些信息组合起来唯一性很强、不容易被猜到——比如具体的平台版本、完整的品牌与版本列表、设备架构等。真实浏览器是"按需返回"这些字段的,不是一股脑全给。

  2. CH 不会被单独拿来判断,而是与其它指纹协同校验。 真实的设备识别体系通常会一起看:CH 与 UA 是否一致、CH 与传输层的指纹(如 TLS 指纹 JA3/JA4)是否来自同一种浏览器、CH 与 JS 环境里的 navigator.platform、并发数、设备像素比(DPR)是否连贯、CH 与操作系统平台特征是否匹配。

所以这里有个很关键的概念:难的不是伪造某一个字段,而是让所有字段像出自同一台真实设备。 单独看某个字段,几乎都能伪造;但要让品牌、平台版本、UA、DPR、内存、架构、TLS 指纹……全部自洽成一套"说得通"的设备画像,才是真正难的地方,也是很多所谓"字段填得很全"的方案依然一眼被看穿的原因。

三、常见的指纹"穿帮"错误有哪些?

明白了"一致性"才是关键,你就容易看懂市面上很多参数配置为什么会出错。常见的错误包括:

  • CH 与 UA 对不上(最常见):UA 写着 macOS 14.1,CH 却返回一个并不真实存在的版本号;
  • 移动 UA 但移动标记是 ?0:真实移动设备这里应该是 ?1
  • 完整版本列表推导错误:比如浏览器主版本是 120,完整版本特征却像老的 115;
  • DPR、内存等值与真实设备矛盾:例如苹果设备显示异常偏低的像素比、或一台普通 Windows 机器显示只有 1GB 内存;
  • 无视浏览器本身的差异:比如给本不支持某字段的浏览器硬塞进这个字段,或者在某个内核上返回该内核根本不会有的字段。

这些在设备识别体系里都相当显眼,本质都是"没有把环境当成一个自洽的整体来配置"。

四、那"正确的配置"到底是指什么?

与其说是在"填字段",不如说是在维护一套自洽的环境画像。通常需要做到这么几点:

  • CH 与 UA 绑定:按浏览器内核和版本的真实规则推导出对应的一套 CH(品牌、平台、版本都要和 UA 对齐),而不是随手拼一个值;
  • 遵循高熵字段的返回策略:默认返回低熵信息,高熵字段按真实浏览器的行为按需返回,不返回当前浏览器根本不支持的字段;
  • 让 JS 属性、HTTP 头与系统特征彼此一致:DPR 与屏幕分辨率一致、内存大小与平台类型匹配、移动标记与 UA 一致、架构信息与整个系统逻辑一致;
  • 与传输层指纹联动:TLS/JA3/JA4 一类的特征也应和声明的浏览器版本相匹配。

一句话总结:真正的难点是让 CH、UA、JS 环境、系统特征一起组成一个"自洽的浏览器行为画像",而不是拼字段的个数。

五、这跟做多账号环境管理有什么关系?

看到这里,做跨境电商、社媒投放或独立站运营的人可能会问:这套技术原理,和"给不同业务账号建独立浏览器环境"有什么关系?关系就在于——环境管理的前提是每个环境自身是自洽的

  • 账号和地区多的时候,与其每个环境都手动去凑 UA、操作系统、分辨率这些参数,不如让工具按你选定的系统与内核版本,自动生成一套彼此对齐的参数,减少"东改一个西改一个、最后互相矛盾"的返工。
  • 不同地区、不同平台的业务账号,应当各自拥有相互独立且参数各自自洽的环境,避免所有账号共用一套"模板化参数",结果在设备层面高度雷同、反而不正常。
  • 当你切换代理到不同地区时,如果环境里的系统版本、设备型号等特征始终是这套环境自身的连贯设定,比"只换 IP、其它参数完全不变"更符合一台设备真实使用时的规律。

这些正是多账号浏览器环境管理工具要解决的"一致性"问题——PurpleMark(紫纹浏览器)在创建环境时,就提供操作系统、Chromium 内核版本、User-Agent、分辨率、时区、语言、CPU/内存、Canvas、WebGL、TLS 等一组指纹与设备参数的统一配置入口。你选定一个地区和账号用途,就能按一套方案生成环境,而不是每次登录临时拼参数。它真正管理的是"账号、浏览器环境、网络配置"放在同一个工作区的整体一致性与可复用性,而不是让你去钻研怎么骗过某一个检测。

六、小结

UA 冻结标志着浏览器指纹进入了新阶段:决定设备识别成败的不再是"有哪些字段",而是字段之间是否自洽。 Client Hints 接棒 UA 成为高熵指纹信号后,理解 CH 与 UA、系统特征、传输指纹之间的联动关系,比记住一堆字段名更重要。

如果你只是维护几个真实、合规的业务账号,不必把精力花在对抗检测上——更实际的做法,是用 PurpleMark 这样的环境管理工具,把每个账号的地区、系统和浏览器参数配置得清晰、自洽、可复用,从源头上减少"环境参数前后矛盾"带来的麻烦。

(提示:本文仅作浏览器指纹技术原理的科普。请始终在遵守各平台服务条款、使用真实合规账号的前提下运营。)