我知道使用户代理提示更加模糊的部分目的是为了使浏览器指纹识别更加困难。
我自己的(Windows 桌面)Chrome 发送标头:
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
sec-ch-ua: "Chromium";v="86", "\"Not\\A;Brand";v="99", "Google Chrome";v="86"
sec-ch-ua-mobile: ?0
Run Code Online (Sandbox Code Playgroud)
我不明白的是:
\"和\\A;里面的字符串?我唯一的猜测是,这应该以某种方式与解析器混淆(就像 CSS 中的反 IE 黑客),但这似乎是一个相当奇怪的目的——而 IIRC,\A就是钟形字符。user-agent具有特定版本号的完整标头,这应该如何实现用户代理提示歧义?user-agent字符串是 Chrome 特有的。它是否有来自其他浏览器的某种嵌入式组件?我遇到了 Chrome 的情况,经过测试87.0.4280.88,在某些情况下 Chrome 会发送sec-ch-ua和sec-ch-ua-mobile请求标头,尽管chrome://flags/#enable-experimental-web-platform-features设置为“禁用”。
例如:
sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"
sec-ch-ua-mobile: ?0
Run Code Online (Sandbox Code Playgroud)
发生这种情况时,摆脱这些标头的唯一方法是使用参数启动 Chrome --disable-features=UserAgentClientHint。
有人对此有解释吗?据我了解,这些功能仍处于实验阶段,规范正在进行中(https://wicg.github.io/ua-client-hints/)。
Chrome 计划于2020 年 6 月弃用并冻结其User-Agent标头。 User-Agent在调试日志中的某些错误时非常有用,因为许多浏览器根据版本的不同而有不同的怪癖。User-Agent已被弃用,取而代之的是Accept-CH和Sec-CH-UA-*。
我需要在Accept-CH中输入哪些值才能使浏览器响应以下用户代理信息?附带的Sec-CH-UA-*标头是什么?