Chrome浏览器如何屏蔽sec-ch-ua*头避免UA切换泄露真实平台?
sec-ch-ua* 系列是User Agent Client Hints(简称UA-CH)标准下的请求头,现在的Chromium内核浏览器发请求时,这些头传递的设备、平台、版本信息优先级比旧的User-Agent字符串高得多,只改UA不动这些头,服务端当然会返回桌面端页面。除了用旧版本浏览器,还有这几个可行方法:
启动参数禁用UA-CH特性
你测试出的启动参数方法是全局生效的:先把所有Chrome进程彻底关闭,给Chrome快捷方式的目标栏追加启动参数--disable-features=UserAgentClientHint,再启动浏览器就不会发送任何sec-ch-ua*头,这时候配合普通UA切换扩展修改UA,模拟任意设备都不会泄露真实平台信息。这个方法对Edge、Brave等所有Chromium内核的浏览器通用。更换支持覆写UA-CH头的扩展
大部分老旧的UA切换扩展都没适配UA-CH标准,只会修改旧版User-Agent字段。你可以换支持自定义请求头的扩展,切换移动端UA的时候,把所有sec-ch-ua*字段同步改成对应移动端的值即可,参考配置:sec-ch-ua: "Not;A Brand";v="99", "Google Chrome";v="120", "Chromium";v="120" sec-ch-ua-mobile: ?1 sec-ch-ua-platform: "Android"使用这类扩展记得开启「允许访问所有网站数据」权限,要在隐身模式下使用也要打开对应权限,否则页面导航请求、跨域请求的头无法被正常覆写,还是会携带真实平台信息。
DevTools内置设备模拟(临时调试首选)
如果只是临时调试移动端页面,不需要折腾扩展或启动参数:按F12打开开发者工具,按快捷键Ctrl+Shift+M(或点击左上角的手机/平板形状的设备切换图标)进入设备模拟模式,在设备列表选择任意移动端机型,Chrome会自动把User-Agent和所有sec-ch-ua*头同步修改为对应移动端的值,刷新页面就能正常加载移动端适配界面。这个配置仅对当前调试标签页生效,不会影响其他标签页的正常浏览。自有站点调试的服务端配置
如果你调试的是自己开发的站点,可以直接在服务端给响应添加如下头,告知浏览器不需要发送UA-CH相关字段:Permissions-Policy: ch-ua=(), ch-ua-mobile=(), ch-ua-platform=()该方案仅对自己可控的站点生效,访问第三方站点时无效。
内容的提问来源于stack exchange,提问作者tony

