浏览器内核发展历史简述
浏览器最核心的部分是"Rendering Engine",译为"渲染引擎",不过更多地将之称为“浏览器内核”,内核主要由“HTML排版引擎”和“JavaScript脚本引擎”组成,前者负责网页HTML和CSS代码的解析、排版和渲染,后者负责脚本的执行,所以不同的内核对同一页面可能渲染出不同的结果。
内核名称 | 是否已被废弃 | 代表浏览器 | 其他说明 |
Trident | 是 | IE(4~11) | 该内核开放接口,但不是开源,所以曾经出现过很多基于IE内核的浏览器 |
Gecko | 否 | Firefox | NetSpace是Firefox的前生,故也是该内核,且该内核开源 |
Presto | 是 | Opera(1~14) | 不开放接口也不开源,Opera14之后改用了Blink,限制Presto发展的原因主要是只有Opera采用了该内核,而Opera也主要只在Windows下运行 |
WebKit | 否 | Safari, Chrome(1~27) | 该内核开源,由早期的KHTML演化而来 |
Blink | 否 | Chrome(28 ), Opera(15 ) | 该内核由Google和Opera Software一起开发,基于WebKit中的WebCore引擎,开源 |
Edge | 否 | Edge | 微软代替IE的一个新兴浏览器,捆绑在Windows10上,不开放接口也不开源 |
WebKit的由来:
1998年,KDE(K Desktop Environment)团队意在开发一套Linux操作系统(或说是UNIX-like系统)可用的图形桌面环境,类似于Windows和MAC OS系列的个人桌面环境,而桌面中最重要的就是浏览器,所以KDE团队另起了一个小组KHTML,专门负责开发KDE桌面的浏览器的内核(该内核也叫做KHTML)。几年之后,MAC OS系统也需要一个浏览器了,当时可选的开源内核有Gecko和KHTML,Apple比较了两者之后,发现KHTML的构架更加简洁清晰,然后Apple把KHTML拿来再做了一些改进,并取名为WebKit(也同样开源),其中的排版引擎为"WebCore",脚本引擎为"JavaScriptCore"。
PS:Linux官方的桌面环境是GNOME(The GNU Network Object Model Environment),这是GNU计划的一部分,意在提供一个标准的、官方的、正式的Linux系统的图形桌面环境,用来取代臃肿的KDE,该计划起于1997年,第一个GNOME版本于1999年发布。
Blink横空出现:
Google早期的浏览器Chrome(1~27)采用的是WebKit内核(注意:Chrome仅仅采用了WebKit中的排版引擎,脚本引擎是自己Google自己的V8),后来Goolge和Apple两家公司越来越不和谐,所以Google打算自己开发一个浏览器内核,于是乎和Opera合作,打造了一个Blink内核(2013年7月首次在Chrome28中使用),其中脚本引擎还是V8。
混乱的user-agent:
(随便举几个例子,如下)
Windows7(32位)下的基于WebKit的360极速浏览器9.5:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Windows7(32位)下的IE11:Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; rv:11.0) like Gecko
Windows7(32位)下的FireFox62:Mozilla/5.0 (Windows NT 6.1; rv:61.0) Gecko/20100101 Firefox/61.0
华为P10(Android 8.0)下的系统自带浏览器:Mozilla/5.0 (Linux; Android 8.0.0; VTR-AL00 Build/HUAWEIVTR-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36
iPad 2018款(iOS 11.4)的Safari:Mozilla/5.0 (iPad; CPU OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1
可以看出不管是什么类型内核的浏览器的用户代理字符串开头均包含"Mozilla"字符串,为什么呢?
解释:(摘自简明现代魔法,略有修改)
1994年Mosaic研发的核心成员马克·安德森(Marc Andreessen)和几何图形发生器的发明人吉姆·克拉克(Jim.H.Clark)共同创立了Mosaic Communication Corporation,同年11月为了避免与NCSA的法律纠葛,公司更名为Netscape Communication Corporation,即网景公司。在二人领导下,公司合力进行超越以往浏览器的新一代浏览器的研发,试图打破Mosaic的垄断并取得业界的领导地位,所以对新浏览器名为 "Netscape Navigator",即“导航者”,简称 "Netscape"。对内其研发代号为Mozilla,中文名称摩斯拉,一说 Mozilla = Mosaic Killer,意为Mosaic杀手。
Netscape自称"Mozilla/1.0(Win3.1)",这时事情开始变得更加有趣。网景支持框架(frame),由于大家的喜欢框架变得流行起来,但是Mosaic不支持框架, 于是网站管理员探测user-agent,对Mozilla浏览器发送含有框架的页面,对非Mozilla浏览器发送没有框架的页面。
后来网景拿微软寻开心,称微软的Windows是“没有调试过的硬件驱动程序”。微软很生气,后果很严重。此后微软开发了自己的浏览器,这就是Internet Explorer,并希望它可以成为Netscape Killer。IE同样支持框架,但它不是Mozilla,所以它总是收不到含有框架的页面。微软很郁闷很快就沉不住气了,它不想等到所有的网站管理员都了解IE并且给IE发送含有框架的页面,它选择宣布IE是兼容Mozilla,并且 模仿Netscape称自己为"Mozilla/1.22(compatible; MSIE 2.0; Windows 95)",于是IE可以收到含有框架的页面了,所有微软的人都嗨皮了,但是网站管理员开始晕了。
因为微软将IE和Windows捆绑销售,并且把IE做得比Netscape更好,于是第一次浏览器血腥大战爆发了,结果是Netscape以失败退出历史舞台,微软更加嗨皮。但没想到Netscape居然以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"。Firefox性能很出色,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完全跟不上它, 因此user-agent探测规则变了,使用Gecko的浏览器被发送了更好的代码,而其他浏览器则没有这种待遇。Linux的追随者对此很难过,因为他们编写了Konqueror,它的引擎是KHTML,他们认为KHTML和Gecko一样出色,但却因为不是Gecko而得不到好的页面, 于是Konqueror为得到更好的页面开始将自己伪装成“like Gecko”,并自称为"Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)",自此user-agent变得更加混乱。
这时更有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作为渲染引擎,但苹果加入了许多新的特性,于是苹果从KHTML另辟分支称之为WebKit,但它又不想抛弃那些为KHTML编写的页面,于是Safari自称为"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5",这进一步加剧了user-agent的混乱局面。
因为微软十分忌惮Firefox,于是IE重装上阵,这次它自称为"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)",并且渲染效果同样出色,但是需要网站管理员的指令它这么做才行。
再后来,谷歌开发了Chrome浏览器,Chrome使用Webkit作为渲染引擎,和Safari之前一样,它想要那些为Safari编写的页面,于是它伪装成了Safari。于是Chrome使用WebKit,并将自己伪装成Safari,WebKit伪装成KHTML,KHTML伪装成Gecko,最后所有的浏览器都伪装成了Mozilla,这就是为什么所有的浏览器User-Agent里都有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字符串变得一团糟,几乎根本无法彰显它最初的意义。追根溯源,微软可以说是这一切的始作俑者,但后来每一个人都在试图假扮别人,最终把User-Agent搞得混乱不堪。
一句话结论:因为网站开发者可能会因为你是某浏览器(这里是 Mozilla),所以输出一些特殊功能的程序代码(这里指好的特殊功能),所以当其它浏览器也支持这种好功能时,就试图去模仿成 Mozilla 浏览器让网站输出跟 Mozilla 一样的内容,而不是输出被阉割功能的程序代码。大家都为了让网站输出最好的内容,都试图假装自己是 Mozilla 一个已经不存在的浏览器……
附上各大浏览器诞生年表:
1993年1月:Mosaic
1994年12月:Netscape
1995年4月:Opera
1995年8月:Internet Explorer
1996年10月:Kongqueror
2003年1月:Safari
2008年9月:Chrome
更多专业前端知识,请上 【猿2048】www.mk2048.com
浏览器内核发展历史简述相关推荐
- 英语简述计算机的发展史,计算机的发展历史-简述计算机的发展史
计算机的发展经历了哪几个阶段?各阶段的主要特征是什么? 一共有四个发展阶段: 第一个发展阶段是电子 管计算机的时代,在年到年.年第一台电子计算机问世美国宾西法尼亚大学,它由冯·诺依曼设计的.占地平方, ...
- 计算机发展历史简述及CPU构成及工作过程——Crash Course内容整理
文章目录 0. 写在前面 1. 计算设备发展简史 1.1 计算设备早期 1.2 机械式计算设备 步进计算机 差分机和分析机 1.3 机电式计算设备 机电式穿孔制表机 Harvard Mark I 1. ...
- 360浏览器登录_浏览器发展历史介绍及当今主流浏览器的详细对比
作为访问internet的工具,浏览器已经成为我们日常生活中必不可少的上网工具了,它能让你加入全球的网络,通过一个窗口就能够连接世界.当你用浏览器时有没有想过浏览器的发展历史?面对市场上繁多的浏览器你 ...
- JS运行机制(浏览器内核)
谈及浏览器,首先我们的第一映像就是页面信息显示或者是从网上百度.谷歌我们所需要的信息.归纳起来大概有两点:1.信息检索:2.信息展示 而回顾浏览器的发展历史,从1991年的世界上第一个有用户注册的浏览 ...
- 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)
内核 首先得搞懂浏览器内核究竟指的是什么. 浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎.它负责取得网页的内容(HTML ...
- 第一讲 《javascript 浏览器发展历史》
javascript 浏览器发展历史 web 发展历史: mosaic (马萨克) 是互联网历史上第一个普遍使用 和 能够显示图片 的 网页浏览器 1993年问 ...
- IT历史:浏览器发展历史
IT历史:浏览器发展历史 [2004-11-5] 各种浏览器版本发布时间表: Mosaic 1.0 0.1 Mar. 1993 Final Nov. 1993 2.0 Alpha 1 ...
- Linux系统发展历史
简述 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由Linus Torvalds在1991年10月5日首次发布,在加上用户空间的应用程序之后,成为Linux操作系统.Linu ...
- javascript---001-运行原理01_前端三大技术_JS重要性_Atwood定律_JS应用_JS让人迷惑_TypeScript会取代JS吗_JS是一门编程语言_浏览器工作原理_浏览器内核
javascript-001-运行原理01 1.前端三大技术 HTML CSS Javascript 2.Javascript的重要性 (1)javascript是很多框架的基础,Vue,React, ...
最新文章
- 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯
- python报错TabError: inconsistent use of tabs and spaces in indentation解决方案
- Qt: QTimer和QThread
- background-size属性100% cover contain
- Spring攻略学习笔记(13)------继承Bean配置
- linux服务器备份,Linux服务器上如何备份
- 3d max插件的基本知识和安装方法
- 2021-07-21淘宝网第二次尝试
- wind金融数据接口python_Wind——接口python
- Gradle入门教程学习笔记
- vue结合elmentui实现前端分页
- flutter微信登录集成
- linux mysql 权限不够_linux提示权限不够怎么办
- 隐藏input的三种方法和区别
- 战旗三国一直显示连接服务器,原来战棋三国2可以这么玩,新手玩家可别错过了!...
- 从qq服务器删除误收邮件,QQ邮箱撤回时显示撤回失败,对方已读 收件箱里的消息却是对方已阅读或已删除 这种情况下邮件有没有被删除...
- 达人评测 i7 13700和i7 12700选哪个
- cartographer中的pose_extrapolator梳理
- Linux基础_软件包管理
- 万事达卡、中国银行、北汽鹏龙联手 推联名信用卡