浏览器野史 UserAgent列传(下)

其实应该叫做浏览器约架史

前篇《浏览器野史 UserAgent列传(上)》

###六、师夷长技

前面说到,微软靠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.51Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51Opera/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、背黑锅。和事不成,就得背黑锅。是的就是这样。

###彩蛋

那么,我们的故事接近尾声。还有一些有趣的小彩蛋。

  1. Chome 28开始,与苹果正式分道扬镳,采用Blink内核,但它的UserAgent并不改变。
  2. 淘宝封杀微信打开淘宝页面,靠的就是微信内置浏览器UserAgent里的MicroMessenger字样。其实微信也可以像当初360一样把UserAgent去掉,但微信并不这样做。
  3. 360出招之时留有后招。也许,它一开始就想到了腾讯会告他们对于UserAgent的欺瞒,因而它其实提供了设置项。默认设置是“保持跟IE一样的UserAgent”,但用户也可以不勾选。只是这选项比较隐蔽,而且你重启浏览器后…又会变回默认设置。如果没有这个小小的设置,结果大家可以自行想象。
  4. 微软又玩新花样了,在泄露版IE 11中,去掉了以往的MSIE字样。初步猜测此举是为了使现有的 CSS hack 失效,避免过去网页设计师对IE差别对待的情况再度发生。但又会引发其他问题啊亲。

End.
Litten 2014.10.5

梦周十<br>炎黄子孙,生活在华夏大地<br><br>热爱大海与冷笑话,<br/>目前是一枚前端<br/><br/>胆小认生,不易相处,<br>年轻无为,卖马为生。