原文链接: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 列传(下)相关推荐

  1. 浏览器野史 UserAgent列传(下)

    前篇<浏览器野史 UserAgent列传(上)> 六.师夷长技 前面说到,微软靠Windows系统捆绑IE销售.而Windows自然也有它的对手,Linux.一个技术快速发展的时代,系统的 ...

  2. 浏览器野史 UserAgent列传(上)

    某天,我做一个小项目,需要判断一下浏览器类型.简单的呀. 控制台敲下:navigator.userAgent 浏览器回应:Mozilla/5.0 (Windows NT 6.1; WOW64) App ...

  3. 浏览器野史 UserAgent 列传(上)

    作者:Litten 原文链接:http://litten.me/2014/09/26/history-of-browser-useragent/ 某天,我做一个小项目,需要判断一下浏览器类型.简单的呀 ...

  4. 览器野史 UserAgent列传

    某天,我做一个小项目,需要判断一下浏览器类型.简单的呀. 控制台敲下:navigator.userAgent 浏览器回应:Mozilla/5.0 (Windows NT 6.1; WOW64) App ...

  5. 火狐浏览器修改userAgent

    火狐浏览器修改userAgent的办法: 在火狐浏览器地址栏输入"about:config",按下回车进入设置菜单. 找到"general.useragent.overr ...

  6. Web开发兼容性系列文章(一):不同设备浏览器的userAgent值大全

    Web开发兼容性系列文章(一):不同设备浏览器的userAgent值大全 Posted on 2011-07-22 12:37 随它去吧 阅读(1388) 评论(11) 编辑 收藏 http://ww ...

  7. 如何修改IE浏览器的User-Agent用户代理字符串信息

    每款浏览器都有一个专属的 User-Agent 字符串信息, 通过 User-Agent 网站可以检测用户所使用的浏览器版本.某些网站为了让用户获得更好的浏览体验,通过检测用户的浏览器版本,以确认用户 ...

  8. 收集几个移动平台浏览器的User-Agent

    转自:http://luckerme.com/archives/1011.html 之前介绍的 更简洁的方式修改Chrome的User Agent,轻松体验移动版网络这种简洁的方法好像只适用于Chro ...

  9. 常用浏览器修改User-Agent的方法

    之前有介绍收集的几个移动平台浏览器的User-Agent,以及在Chrome下修改User Agent的简洁方法,但是有时候还是会使用其他的浏览器来伪装User Agent.今天整理了下常见的浏览器修 ...

最新文章

  1. su oracle : 只切换用户,而不切换环境;就是说切到oracle用户后,使用的依旧是root的环境。 su - oracle :同时切换用户和环境
  2. COSO企业风险管理框架2017版发布!看看有哪些变化?
  3. 借贷记账法下的账户对应关系_笔记整理,会计复式记账法内容及实例
  4. leetcode —— 1025. 除数博弈
  5. iOS界面设计之基础控件的学习 --- UITextField
  6. java 字符 几个字节_java中字符串占几个字节
  7. matlab 三维显示原图像_图像分割基础
  8. 大陆集团ADAS招聘丨老司机带你现场体验自动驾驶的快感
  9. Advanced Graphics and Animations for iOS Apps
  10. 如何准备PMP新版大纲考试?
  11. response.sendRedirect 加域名或者不加域名的重定向加locahost或者不加localhost
  12. mysql运维备份_MySQL运维经验
  13. Java期末大作业-工资系统平台(实验报告内附代码)
  14. qpieseries显示百分比_为饼图添加百分比显示效果
  15. Java基础语法(三)——运算符
  16. Spring Boot 集成 Elasticsearch
  17. 硬核科普:什么是拓扑?
  18. 小程序Promise不支持finally解决方案
  19. 如何打开 plist 文件
  20. 洞察了真正的“智能未来”,百度云ABC如何为主导“第四产业”谋局?

热门文章

  1. 2022年事业单位入职体检不合格标准是怎样的?两大项目必做
  2. 【268期】不小心将测试代码提交到生产环境,教你 6 种方法秒解决!
  3. 禁用火狐浏览器的自动连接
  4. 程序员持续记录开始赚钱之旅 (第一篇)
  5. springboot wagon 更新测试环境
  6. 如何写一个合格的API文档
  7. 权限系统Hub的5个重要接口讲解
  8. 郑州大学c语言考试系统,郑州大学c语言考试机真题.doc
  9. 实验项目5.1 深度学习算法与硬件加速器
  10. 遇到.dll文件删不掉怎么办?来这里教你一招删掉。(亲自实用)