Opera 在用户代理字符串方面引发争议最大的一个浏览器就是 Opera。Opera 默认的用户代理字符串是所有现代浏览器中最符合逻辑的,因为它正确标识了自己和版本。在 Opera 8 之前,其用户代理字符串都是这个格式:
比如,Windows XP 上的 Opera 7.54 的字符串是这样的:
Opera 8 发布后,语言标记从括号外挪到了括号内,目的是与其他浏览器保持一致:
Windows XP 上的 Opera 8 的字符串是这样的:
默认情况下,Opera 会返回这个简单的用户代理字符串。这是唯一一个使用产品名称和版本完全标 识自身的主流浏览器。不过,与其他浏览器一样,Opera 也遇到了使用这种字符串的问题。虽然从技术 角度看这是正确的,但网上已经有了很多浏览器检测代码只考虑 Mozilla 这个产品名称。还有不少代码 专门针对 IE 或 Gecko。为了不让这些检测代码判断错误,Opera 坚持使用唯一标识自身的字符串。 从 Opera 9 开始,Opera 也采用了两个策略改变自己的字符串。一是把自己标识为别的浏览器,如 Firefox 或 IE。这时候的字符串跟 Firefox 和 IE 的一样,只不过末尾会多一个"Opera"及其版本号。比如:
Opera 9.50
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50
第一个字符串把 Opera 9.5 标识为 Firefox 2,同时保持了 Opera 版本信息。第二个字符串把 Opera 9.5 标识为 IE6,也保持了 Opera 版本信息。虽然这些字符串可以通过针对 Firefox 和 IE 的测试,但也可以被识别为 Opera。 另一个策略是伪装成 Firefox 或 IE。这种情况下的用户代理字符串与 Firefox 和 IE 返回的一样,末尾也没有"Opera"及其版本信息。这样就根本没办法区分 Opera 与其他浏览器了。更严重的是,Opera还会根据访问的网站不同设置不同的用户代理字符串,却不通知用户。比如,导航到 My Yahoo 网站会导致 Opera 将自己伪装成 Firefox。这就导致很难通过用户代理字符串来识别 Opera。 Opera 10 又修改了字符串格式,变成了下面这样:
Presto 标识(Presto 是 Opera 的渲染引擎)和版本标识。比如,下面是 Windows 7 上的 Opera 10.63 的字符串:
Opera 最近的版本已经改为在更标准的字符串末尾追加"OPR"标识符和版本号。这样,除了末尾的"OPR"标识符和版本号,字符串的其他部分与 WebKit 浏览器是类似的。下面就是 Windows 10 上的Opera 52 的用户代理字符串:
Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.64
iOS 与 Android iOS 和 Android 移动操作系统上默认的浏览器都是基于 WebKit 的,因此具有与相应桌面浏览器一样 的用户代理字符串。iOS 设备遵循以下基本格式: Mozilla/5.0 (Platform; Encryption; OS-or-CPU like Mac OS X; Language) AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Version/BrowserVersion Mobile/MobileVersion Safari/SafariVersion 注意其中用于辅助判断 Mac 操作系统的"like Mac OS X"和"Mobile"相关的标识。这里的 Mobile标识除了说明这是移动 WebKit 之外并没有什么用。平台可是"iPhone"、"iPod"或"iPad",因设备而异。例如:
AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16
注意在 iOS 3 以前,操作系统的版本号不会出现在用户代理字符串中。 默认的Android浏览器通常与iOS上的浏览器格式相同,只是没有Mobile 后面的版本号("Mobile"标识还有)。例如:
AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
这个用户代理字符串是谷歌 Nexus One 手机上的默认浏览器的。不过,其他 Android 设备上的浏览器也遵循相同的模式。
标签:浏览器,用户,Opera,检测,代理,js,标识,字符串 From: https://blog.51cto.com/u_16273048/9594988