为什么用户代理字符串被更改了?



我在调试应用程序时遇到问题。在我的应用程序中,我需要根据用户代理字符串确定用户是否在移动设备上。

从日志信息中,一开始我看到用户代理是"Mozilla/5.0(iPhone;CPU iPhone OS 11_4_1 like Mac OS X( AppleWebKit/605.1.15 (KHTML, like Gecko( Version/11.0 Mobile/15E148 Safari/604.1",应该是 iOS 11 上的 Safari 11。几分钟后,用户代理信息更改为"Mozilla/5.0(Macintosh;Intel Mac OS X 10_13_4( AppleWebKit/605.1.15 (KHTML, like Gecko( Version/11.1 Safari/605.1.15",应该是macOS(High Sierra(上的Safari 11.1。从茶叶我看到用户没有更改浏览器或设备。

所以我的问题是:

  1. 是否可以在不更改浏览器和设备的情况下更改用户代理字符串?什么时候?

  2. 就我而言,为什么会发生这种情况?

  3. 确定用户使用的是移动设备/平板电脑还是台式机的最可靠方法是什么?

谢谢。

  1. 的。完全可以在不更改浏览器或设备的情况下操作用户代理字符串。完全欺骗它是可能的(而且非常微不足道的(,例如使用适用于Chrome的用户代理切换器。话虽如此,绝大多数用户都不会达到欺骗它的程度。

  2. 考虑到用户代理字符串认为浏览器是相同的,但操作系统不是......我假设用户已在F12 开发人员工具中打开Device Toolbar并启用Responsive Mode。这允许您以不同的纵横比模拟网站的显示,并且在您选择其中一个可用设备时确实会操作用户代理字符串。

  3. 这取决于你到底想做什么。如果您正在寻找基于设备的不同逻辑,我建议您使用正则表达式。在DetectMobileBrowsers上有一些关于不同编程语言的很好的例子。但是,如果您正在寻找不同的显示器,我建议您进行媒体查询。您可以满足设备的widthpixel ratio甚至orientationCSS Tricks上有一个很棒的常见查询列表。

最新更新