浏览器野史 UserAgent 列传(下)

原文链接:http://litten.me/2014/10/05/history-of-browser-useragent2/


师夷长技


前面说到,微软靠 Windows 系统捆绑IE销售。而 Windows 自然也有它的对手,Linux。一个技术快速发展的时代,系统的世界里也是战火纷飞。Linux 系统自从有了可视化界面,也需要浏览器呀。桌面系统 KDE 的缔造者们就发明了一个。


真是具有跨时代意义的工具呀,好伟大呀,人们在想,它叫什么呢?


但大神就是大神,大神就是讲究先从文字上占据压垮你的气势。


先有 Navigator 航海家,再有 Explorer 探索者,咱就叫Konqueror ( Conqueror 的变体) 征服者吧。


行行行。我已懒得理这帮大神…


可是,问题来了。Konqueror 使用 KHTML 排版引擎,即使它们认为自己跟 Gecko 引擎一样优秀,但用户不买单。你 UserAgent 里没有 “Gecko” 字样,我就不给你经过优良排版的 html。


结果,Konqueror 思来想去,做了一个艰难但很萌的决定,把UserAgent写成Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)…


这就是现代浏览器里 like Gecko 这一萌词的由来。


就这样,伟大的排版引擎 KHTML 为了获得更好的资源,师夷长技。这并没什么不好,却造成了UserAgent的越发混乱。


KHTML 与 Gecko 这一对,永远卿卿我我比翼双飞在 UserAgent 里面了。那个满含深意的 “like”,有人觉得翻译成“像”,但也有人觉得应该是“喜欢”…


世界大战


首先是 IE 冷静下来了,他觉得,你们不带这么玩的?


就我年少时不懂事,首先改了个 Mozilla 字样,后面追究这历史我岂不是成了罪魁祸首?我改还不行吗?


在IE6,它明确自己UserAgent为Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)。除去已经注定不可抹去的 “Mozilla” 字样,其余信息简洁,准确,清晰。


但事态已经不可收拾。


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) 三个选择项。第一个是易容成 IE,第二个是易容成火狐,第三个才是自己,选谁就是谁!


其实这并不是一件坏事。因为 Opera 是站在能够让用户通过选择,去获得更好的浏览体验的基础上的。你提供选择,或是不提供,混乱的 UserAgent 还是在这,不离,不弃。再者,这对网页的开发者有极大的好处,在某些情况,你不必同时打开几个不同的浏览器去调试。到目前,最新的 Chrome 浏览器更加炫酷,能够支持近40 种不同的 UserAgent,甚至你还可以自定义。当然这是后话。


与此同时,苹果公司依靠内核 WebKit,开发出 Safari,命名 UserAgent 为 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5。


有人就会问了,不是 Webkit 内核吗,怎么还有 KHTML, like Gecko?注意,内核 Webkit 包含了一个排版引擎叫 WebCore,而 WebCore 是 KHTML 衍生而来的。也就是说,WebCore 是 KHTML 的儿子,子承父业,基因差不多。为了能够正常排版,safari 只能这么写。


后来,google 也开发了自己的浏览器 Chrome,其内核也是Webkit,但它设定UserAgent为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。Safari 一看,不对劲啊!你怎么也在后面写有 Safari?Chrome 呵呵一笑,你懂的。


因此,请让我一口气说完下面这一段:
Chrome 希望能得到为 Safari 编写的网页,于是决定装成 Safari,Safari 使用了 WebKit 渲染引擎,而 WebKit呢又伪装自己是 KHTML,KHTML 呢又是伪装成 Gecko 的。同时所有的浏览器又都宣称自己是 Mozilla。


这就是整个 UserAgent 世界大战的格局…


军阀混战


将目光聚焦到国内,更是狼烟四起,混乱不堪。大家都知道,浏览器是互联网的入口,这块肥肉谁也不想丢。因而一个接一个的 “国产” 浏览器进入斗兽场。


360,百度,QQ,UC,搜狗,猎豹,遨游,世界之窗…你能说出一大堆。连淘宝,酷狗,hao123 都有浏览器,不信你搜。


注意我前面 “国产” 两个字必须加上双引号,因为这个made in china 并不纯。国人并没能像远古大神一样,硬生生发明一个内核出来,我们更擅长 “微创新”。


利用 Trident(IE的内核),包装一下皮肤,美化一下,就可以说:完美兼容利用 Webkit,包装一下皮肤,美化一下,就可以说:极速浏览。


把两个内核都包起来,就可以说:智能双核。


是微创新!读书人的事,能叫偷吗?


在这插播一下,浏览器的 “双核”,并不是你听说手机双核电脑双核那回事。再多个核,速度也不会更快,当然这么说,会显得很厉害的样子。德艺双馨,智勇双全,名利双收,才貌双绝,夫妻双双把家还,你看带 “双” 字的词都很牛的。 


但我上面的叙述,的确有夸张的成分。浏览器的诞生,肯定不仅仅是包一下皮肤那么简单,国内的工程师们,也苦心研究做了许多工作。如果要说优化策略,我可以再写一篇超级长的文章。优化无止境,路漫漫其修远,向同行们致敬。只是我非常讨厌那些不把事实说清楚,纯粹靠文案去忽悠人的产品…


话说回来,这么多国产浏览器,总得靠不同 UserAgent标志自己呀。


大家自动分为两个阵营:使用 Trident 内核的,在 IE 已有UserAgent 后添加自己的名称;使用 Webkit 内核的,就在 Chrome 的 UserAgent 后面添加。


前者像 QQ 浏览器:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.7.26717.400)。


后者像猎豹:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER。


当然双核浏览器诚然就是墙头草,切换内核时 UserAgent 也需要跟着变化。


如此的混战格局,这厢的 IE 和 Chome 想必也是醉了。


国共内战


适者生存是不变的生存法则,国产浏览器们经过一段时间的用户筛选,自然优胜劣汰。时值2010年,真正还在运营和更新的浏览器数量慢慢下降,用户集中在几家表现更优异的厂商手中。就在这时,好看的故事来了—— 3Q 大战爆发。


有人说,腾讯电脑管家的推出是导火索。其实这场仗,大家都忍了好久,推不推出,都一定会在某个事件后爆发。360浏览器是奇虎的重量级产品,用户量众多,2009年它推出一个功能:过滤其它网站的广告。诚然民众们都很喜欢。可是其他互联网公司肯定就不乐意了,用户看不到更点击不到广告,这钱还怎么赚?


因而在 3Q 大战爆发后,腾讯的一个手段就是:如果你使用360浏览器,就不能访问 QQ 的网站(单单 QQ 空间就有巨大的用户量),也直接反攻360的最大收入来源。一个艰难的决定背后,往往是需要无数种的技术战略支撑的。企鹅判断用户是否使用360浏览器,依靠的就是 UserAgent 里是否有 “360SE” 的字样。


战报传来:号外,360浏览器上不了 QQ 空间!已经买了黄钻的杀马特贵族急了呀!只能换浏览器了呀!感覺侢乜卟哙噯嘞呀!


2011年11月3日,腾讯网站封杀360浏览器
2011年11月4日,360浏览器访问量仅为昨日一半
2011年11月5日,360浏览器访问量几乎为0


有人说,腾讯就这么快赢了?恰恰相反,360浏览器通过一次强制的自动升级,又可以访问 QQ 的网站了。360的工程师们在5日使用了伪装术——把 “360SE” 字样从 UserAgent 中去掉!


意思就是,360浏览器的 UserAgent 跟 IE 完全一样,你根本判断不出来(因而访问量为0)。就怕流氓有文化!企鹅傻眼了,总不能把大微软的 IE 也一并给禁了吧…


企鹅在技术上拿360没办法,而360则得到了一个跟 IE 一样的身份证。在这场内战中,受伤的除了广大网民们,其实还有令人心疼 UserAgent 君,以往让它越长越长就算了,这次长了还得阉割掉,真心 dan 疼呀。


明日边缘


看到这里,大家会明白一个道理:如果未来不出现一款霸主级别的浏览器(或内核),UserAgent 应该不会有大变化了。


不过,这道理并不全对。别忘了,移动也是有浏览器的。


在早期能上网的手机里,内置了各手机厂商自研的浏览器。这些浏览器并不需要像 PC 一样的复杂设计,可以访问 wap 网页就足够了。因而它们的 UserAgent 命名,怎么简单怎么来,就直接叫诺基亚 3100 Nokia3100/06.01 (UCWEB 3.3B),PHILIPS755 ObigoInternetBrowser/2.0 这样,有甚者连浏览器叫什么都不带  TCL-3199,三星 E618 SEC-SGHE618。


这样任由发展下去,一种要历史重演,往日重现的即视感压迫而来。


web 世界的联合国——W3C 组织,站在明日边缘,面对着历史和未来,终于发话,它制定 UserAgent 标准,以后都得按这规范去起名字。详细请阅 User Agent Accessibility Guidelines。至此,命运坎坷的 UserAgent 终于逐步走向规范。W3C 大法好,有人说你怎么不早点来拯救世界呀!其实 W3C 一直在努力,但规范的制定,到推广至大家认可并执行,是一条漫长的道路,需要时间,也需要实践。


W3C 组织,在制定 web 标准这件工作之外,再我看来,还有两个身份:1、和事佬;2、背黑锅。和事不成,就得背黑锅。是的就是这样。


浏览器野史 UserAgent 列传(上)


end


LeanCloud,领先的 BaaS 提供商,为移动开发提供强有力的后端支持。更多内容请关注「LeanCloud通讯」

浏览器野史 UserAgent 列传(下)