User agent 切换器(user agent switcher)是一种浏览器工具,通常是扩展程序,用来修改浏览器发送给网站的 user agent 字符串,让网站以为你在使用另一种浏览器或设备。开发者用它查看针对特定浏览器提供的内容,或检查设备识别逻辑。但仅仅修改 user agent 并不会显示手机版布局:视口、屏幕尺寸和像素比都没有变化。所以做移动端测试时,需要一个同时修改这些参数的工具。
什么是 user agent
浏览器发出的每个请求都包含一个 User-Agent 请求头,这是一段描述浏览器、引擎和操作系统的文本。Windows 上较新的 Chrome 发送的内容大致如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<major version>.0.0.0 Safari/537.36
安卓手机上的 Chrome 发送的内容大致如下:
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<major version>.0.0.0 Mobile Safari/537.36
“Mozilla”“AppleWebKit”“like Gecko”“Safari”这些名称混在一起,是历史原因造成的:浏览器互相复制对方的字符串,以免被只识别某一种浏览器的网站拒之门外。很多服务器会检查 Mobile 这个词,以决定是否返回手机版页面。
精简版 User-Agent 与客户端提示
Chrome、Edge 等基于 Chromium 的浏览器现在发送的是精简版 user agent。次版本号被替换为零,安卓版本和设备型号固定为通用值(也就是上面的 Android 10; K),Windows 版本也被固定。更详细的信息改由 User-Agent Client Hints(客户端提示)提供,例如以下请求头:
Sec-CH-UA:浏览器品牌和主版本号Sec-CH-UA-Mobile:移动端为?1,桌面端为?0Sec-CH-UA-Platform:操作系统
如有需要,服务器还可以请求更多提示(型号、完整版本号)。JavaScript 通过 navigator.userAgentData 读取同样的信息。
这一点对切换器很重要。如果工具只改 User-Agent 请求头,而客户端提示仍然显示“桌面端”,发送的信息就自相矛盾,有些网站会察觉到。好的工具会同时修改两者。
User agent 切换器的用途
- 检查设备识别。 如果你的服务器、CDN 或 WordPress 插件会给手机返回不同的 HTML,切换 user agent 就能看到那个版本。
- 复现问题反馈。 有访客说网站“在 Samsung Internet 上出错”。设置成该 user agent,可能会暴露基于 user agent 的代码分支。
- 测试“浏览器不受支持”的提示条以及针对特定浏览器的 polyfill。
- 查看爬虫看到的内容,例如在调试 SEO 或爬虫规则时使用爬虫的 user agent。
User agent 切换器做不到的事
修改 user agent 并不会改变:
- 视口宽度,所以 CSS 媒体查询不会响应
- JavaScript 读取到的
screen.width、devicePixelRatio和触控支持 - 渲染引擎:假装成 Safari,并不会让 Chrome 按 WebKit 的方式渲染
因此,在桌面版 Chrome 窗口里使用 iPhone 的 user agent,常常会看到一种奇怪的混合效果:服务器返回的手机版 HTML 被拉伸成桌面宽度。要得到真正的手机视图,需要同时模拟视口、像素比和 user agent。Chrome DevTools 的设备模式可以做到,Mobile View Extension 这类手机视图扩展也可以,它一步就能应用对应设备的 user agent、受支持的客户端提示、屏幕尺寸、像素比和触控配置。两种方式的对比见手机模拟器扩展与 DevTools 对比。
真的需要扩展程序吗?
如果只是偶尔测试一次,不需要。Chrome DevTools 可以在 Network conditions 中覆盖当前标签页的 user agent,选择手机时设备模式也会自动设置。具体步骤见如何在 Chrome 中修改 user agent。
如果你需要频繁切换、想按网站设置规则,或者希望在关闭 DevTools 后设置依然有效,才值得安装扩展。
如何选择 user agent 切换扩展
User agent 切换器能看到并修改你的每一个请求,所以要像对待任何拥有广泛权限的扩展一样谨慎选择:
- 隐私政策。 应明确说明不收集浏览数据。避开会插入广告或统计代码的切换器。
- 客户端提示。 它是否修改
Sec-CH-UA-*请求头和navigator.userAgentData,而不只是User-Agent字符串? - 按网站或按标签页设置规则,免得在银行网站上忘了关掉伪装的 user agent。
- 最新的预设。 使用 Chrome 60 或 iOS 11 字符串的旧预设会触发“浏览器版本过旧”的提示。
- 近期有更新,可在 Chrome 应用商店查看。
隐私:随机 user agent 能保护你吗?
“随机 user agent”类扩展声称能增加跟踪难度,但效果有限。指纹识别脚本会使用很多信号(屏幕尺寸、字体、时区、显卡),一个与其他信息对不上的 user agent,反而可能让你的浏览器更加与众不同。就隐私而言,内置反指纹保护的浏览器比切换字符串更有效。
常见问题
User agent 切换器有什么作用?
它修改浏览器发送给网站的浏览器和设备信息,让网站把你当作另一种浏览器或设备。
切换 user agent 能看到网站的手机版吗?
能看到服务器返回给移动设备的 HTML,但看不到手机版布局,因为视口宽度没有变。请使用设备模拟,或同时修改视口的手机视图扩展。
使用 user agent 切换器安全吗?
这种做法本身无害,风险在于扩展程序。选择隐私政策清晰、权限最少、近期有更新的扩展,不用时就关掉。