【译】浏览器user-agent的历史

3,436 阅读5分钟

原文地址:History of the browser user-agent string 翻译文章地址:浏览器user-agent的历史

译者:一篇有些年头的文章,如果你对于浏览器user agent的历史不甚了解(就像我),那么这篇文章对于你应该很有帮助,另外原文下的评论也很精彩

  起初有款浏览器叫NCSA MosaicMosaic自称为NCSA_Mosaic/2.0 (Windows 3.1),它可以显示一些图片和文字,这是很令人欣喜的。

  后来,出现了一款名为Mozilla的新型网络浏览器,它的名字Mozilla是“Mosaic Killer”的缩写。但是Mosaic觉得这并不好笑,所以Mozilla便更名为Netscape,并且自称Mozilla/1.0 (Win3.1)Netscape支持那些很流行的框架,但是Mosaic却不支持这些框架,因此当时就诞生了“user agent嗅探”,并且人们只向Mozilla的网站管理员贡献一些框架,而不向其他浏览器贡献。

  然后,Netscape说道,让我们一起嘲笑一下微软,并且称Windows为“难以调试的设备驱动”,微软听到这些后很生气。所以微软就自研出了被称为Internet Explorer(译者注:以下简称IE)的浏览器,并且希望这款浏览器成为Netscape killer虽然IE支持框架,但是它毕竟不是Mozilla,所以没有人为IE提供框架,为此微软变得不耐烦了,它不愿再等待那些网站管理员学习IE并且给它贡献框架,因此,IE宣布它是“兼容Mozilla”的并且开始模仿Netscape,同时它自称为Mozilla/1.22 (compatible; MSIE 2.0; Windows 95),接下来IE就陆陆续续收到了其他处贡献的框架,微软全员为此都很高兴,但是同时网站管理员们却变得困惑了起来。

  随后,微软就利用Windows来迅速扩张IE,同时让IE变得比Netscape更好,第一次浏览器大战在这片土地上爆发了。然后,Netscape公司就被干掉了,微软觉得很开心。但是Netscape却以Mizilla的名义东山再起了,前同事Mozilla研发了一款非常优秀的渲染引擎-Gecko,并自称为Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826。然后Mozilla诞生了我们熟知的Firefox,称其为Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0随后,Gecko开始大量被使用,其他浏览器也都开始使用它的代码,这些浏览器有的自称Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1,有的自称Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0,每一个都伪装成Mozilla,而且它们都是由Gecko驱动的。

  后来,Gecko发展的很好,“user agent嗅探”又出现了,社区贡献给Gecko一些其他浏览器没有的很好的代码,所以此时IE又不行了。Linux爱好者们很难过,因为他们已经研发了Konqueror,其引擎是KHTML,他们认为它和Gecko一样优秀,但是它毕竟不是Gecko,所以它没有被提供一些好的页面,因此Konqueror开始伪装成类Gecko型以获取一些好的页面,并且自称为Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko),可以看到这有很多混乱的地方。

  接着,Opera说道“我们确实应该允许用户来决定模拟哪个浏览器”,于是Opera创建了一个菜单项,并且自称为Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51或者Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51, or Opera/9.51 (Windows NT 5.1; U; en),用户可以自行选择这两种类型。

  随后,苹果公司研发了Safari,使用了KHTML引擎,但是给引擎添加了很多功能特性,而且还把这个项目拆分了出来,称它为Webkit但是苹果公司依然希望为KHTML编写页面,所以Safari称它自己为Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5,对比以上的混乱,情况变得更糟了。

  微软非常害怕Firefox,所以它重新拾起了IE,称它为Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0),并且它呈现很好的代码,但是前提是网站管理员指示它这样做

  然后,Google研发了Chrome,使用了Webkit引擎,就像Safari一样,想要为Safari构建页面,所以它伪装成Safari。因此Chrome使用了Webkit,并伪装成Safari,Webkit伪装成KHTMLKHTML伪装成Gecko,所有浏览器都假装是Mozilla,Chrome自称是Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13,user agent一团糟,几乎毫无用处,每一个都伪装成其他的样子,真真儿地混乱不堪

(全文完)

谈一些我的感想吧

就拿我自己的机子上的几个浏览器来说

  • Chrome 69:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
  • Safari 12:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15
  • Firefox Nightly 59.0a1:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0

一眼望去,很繁琐而且很相似,而且我这还是一些当前主流浏览器,一些小众浏览器的ua可能会包含很多其他繁杂的信息

对于ua,其实以前没怎么关注过,偶然看到这篇文章后我才发现,这ua的历史真就像我们大多数的老项目的迭代一样呀,代码一层包一层,user agent一层包一层,你伪装成我,我伪装成它,导致它的识别很容易被欺骗,所以猜测用户正在使用的浏览器是一种很不靠谱的方式,如果能提供一种简单的、有效的、直接了当的方法来区分用户正在使用哪种浏览器那就最好了

相关文章