本文原文来自 WebAIM 2008 年介绍浏览器 User Agent 演化史的一篇文章 (http://webaim.org/blog/user-agent-string-history/),内容有各个主流浏览器 UA 串的产生原因和为什么所有浏览器都带有 Mozilla 等问题的解释。读过 Internet Explorer 11: “请不要再叫我 IE”一文评论之后发现大部分 CB 读者并不了解目前浏览器 UA 产生的原因和为什么要统一到 Netscape/Gecko,所以希望投递本文能解释清楚这些情况背后的原因。
起初东边来一浏览器叫 NCSA Mosaic,自称 NCSA_Mosaic/2.0 (Windows 3.1),渲染网页图文并茂,人民群众见了喜大普奔。
然后西边来一浏览器叫 Mozilla,就是“干死 Mosaic”的缩写。Mosaic 不高兴了,Mozilla 悻悻改名网景,但还是自称 Mozilla/1.0 (Win3.1),人民群众见有新浏览器用更加喜大普奔。网景首创网页框架,框架深得群众欢心。可惜 Mosaic 不认识框架,为了少麻烦智慧的劳动人民创造了 UA 探测:管自己叫 Mozilla 的有框架,不管自己叫 Mozilla 的一律不给发框架!
网景做大了开始戏耍微软开心,管 Windows 叫“蓝屏死机烂驱动”。微软怒从中来,誓言自己做浏览器搞死网景,于是还真的做出了个 Internet Explorer。IE 有框架可又不是 Mozilla,于是见到陌生人的服务器纷纷发没框架卡:对不起,你是一个 Mosaic。微软没耐心了,感到等到网管搞清楚 IE 是啥大概要猴年马月,于是让 IE 说自己是 Mozilla 兼容以便冒充网景——自称 Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)。从此 IE 也有了框架用,微软上下喜大普奔,莫名奇妙的 UA 却搞得各家网管晕头转向。
Windows 开始捆绑 IE,IE 越做越好远胜网景,于是第一次浏览器大战打响了。结果网景惨败,微软上下喜大普奔,却没注意到死后的网景涅盘成了 Mozilla 基金会。Mozilla 制作了 Gecko,自称 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826,里面的 Gecko 是个优秀的渲染引擎。Mozilla 后来又成了火狐,自称 Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0,火狐是极好的。Gecko 又开始增殖扩张,不少浏览器站在 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 是好的,而 IE 又不行了,所以 UA 探测又焕发生机了:说自己有 Gecko 的浏览器有好网页,剩下的浏览器不合标准的残羹剩饭凑合吃吧。但是 Linux 用户不满了——因为他们有内心是 KHTML 的 Konqueror,而他们觉得自己的 KHTML 和 Gecko 一样棒。可是 KHTML 不是 Gecko,所以在服务器的眼里只能和 IE 一起扒剩饭吃。因此 Konqueror 开始自称“类似 Gecko”,全名 Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)。各家网管再次晕头转向。
这时候自由派的 Opera 来了,说“冒充谁,用户决定!”所以 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,还可以是 Opera/9.51 (Windows NT 5.1; U; en)。
之后苹果又搞了 Safari,拿来了 KHTML,敲敲打打修修补补一番满意之后改称 WebKit。Safari 想要用给 KHTML 准备的网页,因此自称 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)。IE 8 是能渲染好网页的——不过只限网管明确命令它如此做的情况下。
然后谷歌又有了 Chrome,Chrome 和 Safari 一样用 WebKit,所以想要用写给 Safari 的网页,于是就假装自己是 Safari。WebKit 又假装自己是 KHTML,KHTML 假装自己是 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,明眼人都能看出来这名字乱的一塌糊涂几乎一点用都没有。这时候一群浏览器互相冒充,已经到了所有人都搞不清楚的地步了。