为什么IE9+、Chrome和Opera15+浏览器在用户代理中将自己标识为Mozilla



我正在寻找一种用JavaScript识别IE的方法,突然,我注意到浏览器被识别为Mozilla:

Opera

Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/30.1599.101 Safari/537.36 OPR/17.0.1241.53

Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/310.1650.57 Safari/537.36

IE

Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;Win64;x64;Trident/5.0)

现在我想知道为什么这些浏览器被识别为Mozilla

这是网站开发人员和web浏览器之间无休止战争的结果。

每当浏览器推出新功能时,开发人员都希望使用该功能。但他们也需要处理不支持它的浏览器

最明显的方法通常是使用UA字符串。查找您知道支持该功能的浏览器,并相应地运行您的代码。容易的

但这并不容易,因为不可避免的是,几个月后,其他浏览器也支持同样的功能。

因此,现在其他浏览器都有一个问题:网站被编写为使用它们支持的功能,但这些网站只为一个特定的浏览器激活该功能。

浏览器供应商的解决方案是:修改他们的UA字符串,让它欺骗网站激活该功能。

这种事情从20世纪90年代就开始了,当时IE和Netscape进行了"浏览器战争"("Mozilla"是Netscape唯一的UA字符串名称,所以其他人都将其复制到他们的UA字符串中以保持兼容性),并一直持续到今天(当IE11发布时,它的UA字符串与IE10的UA字符串完全不同,这是特别为了破解浏览器嗅探代码而做的)。

最终的结果是,所有主要浏览器的UA字符串都是一团糟。它们充满了奇怪的东西,比如竞争对手的名字、错误的版本号、多个版本号和其他模糊的引用,所有这些都是为了愚弄任何愚蠢到试图阅读它的脚本。是的,解析它并获得可靠的浏览器检测可能是可能的,但一旦任何浏览器发布新版本,它可能会再次崩溃。

除此之外,为了增加混乱,大多数浏览器还提供配置设置,让用户能够更改UA字符串;众所周知,一些第三方产品(防病毒、防火墙、代理等)也会修改或替换UA字符串,所有这些都使您从解析中获得可靠响应的可能性更小

那么,这一切的意义何在

作为一个开发人员,最好的办法就是完全忽略UA字符串。对于任何实际目的来说,它实际上都毫无价值。如果您需要使用可能在所有浏览器中都不可用的功能,通常最好进行功能检测,而不是嗅探UA字符串(为此,您可能需要考虑使用Modernizr库)。

只要假设UA字符串不存在,作为一名开发人员,你的生活就会轻松很多。

最新更新