前端历史

一切的起点

事情起源于信息共享。Tim Berners-Lee 受命开发一套软件系统,供 CERN 研究人员分享、更新、查阅研究报告。
超文本(HyperText)是 Ted Nelson 在 1965 年提出来的一个概念,不同的信息之间用超文本链接起来,点击就可以进入这个信息结点,而李爵士设计的万维网,就是这个概念的实现。
万维网的核心部分是由三个标准构成的:
统一资源定位符(URL),根据统一资源定位符,可以找到这个资源。
超文本传送协议(HTTP),规定客户端和服务器怎样交流,允许用户通过 URL 访问资源。
超文本标记语言(HTML),定义超文本文档的结构和格式。
浏览器、服务器、超文本传输协议,这三者就是前端最初的模样。因为万维网的创建就是为了文档共享,所以你可以看到 HTML 本质上就是一个 document,所以初代 HTTP 协议只规定了 GET 请求,响应格式也只支持 HTML。而你也很容易就能理解为什么 HTTP 是一个无状态的协议,因为它的诞生就是为了请求文档,因为互联网的精神是共享。

相关概念

URI 和 URL

每个信息都有唯一的统一资源标识符 URI (uniform resource identifier),相当于我们的身份证号;同时,每个信息还有唯一的统一资源定位符 URL (uniform resource locator),相当于唯一的家庭住址。只要输入 URL,就能够根据 URL 就能找到这条信息。
与之相关的概念还有统一资源命名 URN (uniform resource name),通过名字来唯一标识资源。
URI 是一种抽象的概念,而 URL 和 URN 都是这个概念的具象化。也因此,在一些场景中,你可以把 URI 同化为 URL。但实际上,URL 和 URN 都是 URI 的子集。

HTTP

HTTP 全称是 Hypertext Transfer Protocol,超文本传输协议,是基于 TCP/IP 的应用层协议,采用 BS 架构(浏览器-服务器架构),规定了客户端和服务器的通信格式,默认使用 80 端口。
客户端按照这个格式发送请求,服务器端按照这个格式解析请求并以此格式发送响应。

HTML

HTML 全称是 Hyper Text Markup Language ,超文本标记语言,不论是超文本,还是标记语言,都是早已有之的概念。
前面提到过超文本,你可以简单地把它理解为 a 标签。至于标记语言,在最早的时候是出版业的一个概念,在文字打印的时候做一些标记,字体字号,加黑居中等等。这一点我们仍旧可以在现在的 HTML 中看到,文件开头用 doctype 声明文档类型让浏览器用正确的方法来解析这个文件,文件内用各种标签让浏览器以不同的逻辑来做渲染,使这个页面正确地展示在我们面前。

HTTP 的历史

  • 1991 年,伴随着万维网的亮相,初代 HTTP 也走入了大众的视野,在后来的 HTTP 发展史中,称它为 HTTP/0.9。在这个版本中,只能发布 GET 请求,规定服务器返回 HTML 格式的字符串。
  • 1995 年初成立了 HTTP 工作组,称为 HTTP WG , 由 Dave Raggett 领导,标准化和扩展化该协议,并把它们记录为官方 RFC。
  • 1996 年 5 月,HTTP/1.0 发布,增加了 POST 命令和 HEAD 命令,可以发送任何格式的内容,并且改变了 HTTP 请求和响应的格式,新增了 HTTP header,用来描述元数据,并且增加了响应的状态码。事实上,在 HTTP/1.0 发布之前,未正式发布的 HTTP/1.0-draft 已经被很多浏览器和服务器使用了。
  • 1997 年 1 月,时隔半年,HTTP/1.1 发布,加入了持久化连接,建立 TCP 连接之后保持一段时间的连接,可以让一个 TCP 连接被多个请求复用,提高请求的效率。另外除了原有的 POST 和 GET 外,还增加了很多请求方法,PUT、PATCH、HEAD、OPTIONS、DELETE。HTTP/1.1
  • 2015 年,HTTP/2 发布,HTTP/2 主要的目标是提高请求的速度,减少请求时间。为此增加了二进制分帧、多路复用、服务器推送、头部压缩等新特性。只用于 HTTPS 加密连接。
    HTTPS 指的是,在 HTTP 协议的基础上套接一层 SSL 做数据的加密。SSL(Secure Socket Layer) 安全套接层,在 TCP/IP 四层概念模型(应用层、传输层、网络层、数据链路层)中介于应用层和传输层之间,应用层数据不直接传递给传输层,而是传递给 SSL 层,经过加密之后再进行传输。
  • 2022 年,HTTP/3 发布。在 HTTP/2 中采用了多路复用来解决 TCP 的队头阻塞问题,但即使是多路,在每个队头仍然存在少见的队头阻塞问题,因此 HTTP/3 决定不再使用 TCP/IP 连接,而是使用 QUIC + UDP。
    从 HTTP 的发展我们可以看见,它从一开始就是为了解决实际问题出现的。它的诞生是为了传输 HTML 文件;随着 web 的发展,人们需要传输更多类型的文件,需要各种标识,所以有了 HTTP/1.1;而在满足基本的传输需求之后,随之而来的性能和安全问题也被提上了日程,因此有了接下来的 HTTP/2 、 HTTP/3 以及 HTTPS。

HTML 的历史

  • 1990 年,HTML 伴随着 WWW 的诞生而诞生。
  • 1994 年 10 月,W3C 成立,负责维护和制定 web 相关的标准。
  • 1995 年 11 月,HTML 2.0,在 2000 年 6 月被宣布过时。
  • 1996 年 1 月,HTML 3.2。
  • 1997 年 11 月,HTML 4.0。
  • 1999 年 12 月,HTML 4.01 以 XML 语法重新构建,比之前严格。值得一提的是,W3C 在随后的 2000 年 1 月,就推出了 XHTML1.0 ,试图以严格的语法和极低的容错性规范已存在的种种不规范的行为。在那之后的 2001 年 5 月,又发布了 XHTML 1.1。
  • 2004 年,各大浏览器开发商组成了 WHATWG 小组,在 HTML 4.01 的基础上继续开发 HTML 5。
  • 2006 年,W3C 放弃 XHTML 2.0。
  • 2007 年,W3C 参考 WHATWG 拟定的 HTML 5 继续发展 HTML。
  • 2014 年 10 月,W3C 正式发布 HTML 5.0。

CSS 的发展

在很早以前,我刚学前端的时候听说过一句话,大致意思是:如果说 HTML 是网页的骨架,那么 CSS 就是它的皮囊。在我当时的理解里,前端就是 HTML + CSS + JS ,结构、表现和行为,他们控制着我们面前的网页。
把目光拉远,才发现原来应该是浏览器 + 服务器 + 传输协议,当然这是后话,定义总是会让它变得狭隘,君子不器。
总的来说,CSS 在前端页面中扮演着点缀的作用,它丰富了样式,控制着网页的外观。
从 HTML 诞生伊始,就已经有了 CSS 的雏形。但当时 CSS 还不是 CSS,只是样式。李爵士当时的想法是在浏览器端以一个简单的样式表实现样式,这样每个浏览器都可以决定如何更好地向用户展示页面,而他当时也是这样编写他的第一个浏览器的。
只能说,结构与样式分离的思想一直都在,只是从浏览器,转换到了网页上。

  • 1994 年 10 月,Hakon Wium Lie 发布了Cascading HTML style sheets初稿。Bert Bos 对这份初稿做出了回应,当时他正在开发 Argo 浏览器——一个带有样式表的高度可定制浏览器。Argo 的一个目标是可以兼容除 HTML 外的其它标记语言,而这也成为了 CSS 的目标,因此 Cascading HTML style sheets 变成了 Cascading style sheets。
  • 1995 年,W3C 参与 CSS 规范的制定,在一次研讨会上,Microsoft 的 Thomas Reardon 承诺在即将推出的 Internet Explorer 版本中支持 CSS。
    而在 1995 年年底,Netscape 的 Lou Montulli 也加入了在浏览器上支持 CSS 的计划。
  • 1996 年 12 月,W3C 推出了 CSS 1。
  • 1998 年 5 月,W3C 发布 CSS2。
  • 2004 年 2 月,推出 CSS2.1,修改了 CSS2 中的一些错误,并增加一些扩展内容。
  • 2011 年 6 月,CSS3 推出,与之前的 CSS 版本不同的是,CSS3 被分为了多个模块单独升级,统称为 CSS3。
  • 2011 年 6 月,CSS3 Color Module 发布;同年 9 月,Selectors 和 Namespaces 发布;2012 年 6 月,Media Queries 发布……

JavaScript 的发展

Netscapt Navigator 浏览器如日中天的时候,为了控制浏览器行为,避免不必要的服务器连接操作,JavaScript 作为可嵌入网页的脚本语言应运而生。

  • 1995 年 5 月,Brendan Eich 设计完成了第一版,叫做 Mocha,1995 年 9 月改为 LiveScript,同年 12 月,改名为 JavaScript,试图借着 Java 的声势推广开来。
  • 1996 年 3 月,Netscape Navigator 2.0 正式内置了 JavaScript。
    此时仍旧是 Netscape 与微软的浏览器大战期间,1996 年 8 月,不甘示弱的微软模仿 JavaScript 开发了 JScript,内置于 IE 3.0。
  • 1996 年 11 月,Netscape 决定将 JavaScript 提交给国际标准化组织 ECMA (European Computer Manufacturers Association),希望 JavaScript 能成为国际标准。
  • 1997 年 7 月,ECMA 发布 ECMA-262 的第一版(ECMAScript 1.0),规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript。因此,ECMAScript 是 JavaScript 的标准,而后者是前者的实现。
    而事实上,JavaScript 不仅仅实现了 ECAMScript,还同时包含了 DOM (Document Object Model, 文档对象模型) 和 BOM (Browser Object Model, 浏览器对象模型),DOM 用于提供与网页内容进行交互的方法和接口,BOM 用于提供与浏览器内容进行交互的方法和接口。网页从此不再是单纯的一个展示页面了。
  • 1998 年 6 月,ECMAScript 2.0 发布。
  • 1999 年 12 月,ECMAScript 3.0 发布,得到了广泛支持。
    而 ECMAScript 4.0 因为过于激进被废除,部分功能在 2008 年 7 月发布为 ECMAScript 3.1。
  • 2009 年 12 月,ECMAScript 5.0 发布。
  • 2011 年 6 月,ECMAScript 5.1 发布,并且成为 ISO 国际标准。2012 年底,所有主要浏览器都支持 ECMAScript 5.1 版的全部功能。
  • 2015 年 6 月,ECMAScript 6 正式发布,并且更名为 ECMAScript 2015,计划以后每年发布一个 ECMAScript 版本。
  • 2016 年 6 月,《ECMAScript 2016 标准》发布。
  • 2017 年 6 月,《ECMAScript 2017 标准》发布,正式引入 async。

浏览器大战

浏览器大战无疑是所有的前端开发人员无法忽略的一个部分,因为它的后遗症我们至今还能略窥一二。IE 兼容不知道是多少前端工程师的噩梦。
李爵士在创建万维网的同时创建了第一个浏览器 WorldWideWeb ,后来更名为 Nexus,于 1991 年于 NeXTSTEP 平台发布。

  • 1992 年底,陆续出现了其它浏览器。
  • 1993 年出现的浏览器中最具影响力的是 Mosaic,由美国国家超级电脑应用系统(NCSA)开发,并授权多家公司让他们创造自己的产品。
    Mosaic 的开发者之一马克·安德森于 1994 年成立了 Mosaic Communications Corporation 公司,并开发了 Mosaic Netscape 浏览器,后因为法律问题改名为 Netscape Communications Corporation,也就是我们后来熟知的网景通讯公司,浏览器也改名为 Netscape Navigator,很快该浏览器统领了浏览器市场。
  • 1995 年,微软在 Mosaic 基础上开发了 Internet Explorer,通过 Windows 搭售。IE 开始进入浏览器市场。
    IE3 于 1996 年 8 月发布,在 CSS1 尚未成为 W3C 推荐标准的时候率先支持了 CSS1,Netscape Navigator 4.0 随之也支持了 CSS1。
    他们为了超越彼此,给自己的浏览器增加了很多新的功能。一方面促进了互联网的快速发展,另一方面却因为忽视标准,为兼容问题埋下了隐患。
    标准还在那里,但互联网永远是实用大于理论,开发者面向 IE/Netscape 开发网页。后来我们知道,微软在 IE 里面加的部分不符合标准的特性使得有些网页只能用 IE 打开。
    这场对决最终在 1998 年底以 IE 胜出落幕。当 IE 一家独大的时候,浏览器创新的脚步就慢了下来。安全问题随之而来。
    与此同时,失败的 Netscape 开放了源码,该产品使用 Mozilla 的名称,在 2002 年推出 1.0 版。它的衍生产品之一 Firefox 于 2004 年推出 1.0 版,是的,就是我们熟悉的火狐浏览器。
    体积小、可定制、使用快捷的 Opera 3.5 在 1998 年 11 月发布,加入了浏览器市场。
  • 2008 年,Google 推出了 Google Chrome 浏览器,自此 Internet Explorer 走向衰落。
  • 2013 年,Opera 放弃自有的 Presto 渲染引擎,改用 Chromium 系的 Blink 引擎。
  • 2015 年,微软开始开发 Microsoft Edge 浏览器并逐步放弃 IE。
  • 2020 年,Edge 放弃自有的 EdgeHTML 浏览器引擎,改用 Chromium 系的 Blink 引擎。
  • 2022 年 6 月,Microsoft 永久停用 Internet Explorer。
    早期的浏览器大战中,不同的浏览器的渲染引擎不同,导致渲染的效果有出入,css hack 应运而生,用于解决不同浏览器上样式展示不一致的问题。而后来的参与者明显更加尊重标准,避免了 web 开发人员面向多个不兼容的平台开发。

万维网的历史大事记

  • 1990 年,李爵士及其团队创建了第一个网络浏览器 WorldWideWeb、第一个网络服务器(后来被称为 CERN httpd)以及描述项目本身的第一个页面。
  • 1991 年 8 月 6 日,万维网首次亮相。
  • 1993 年 4 月 30 日,CERN 宣布万维网对任何人免费开放,不收取任何费用。
  • 1994 年 10 月,W3C 成立,创建者是李爵士。W3C 致力于维护和制定 web 相关的标准,解决不同平台、技术和开发者带来的不兼容问题,保障网络资讯的流通。
  • 1995 年 6 月,Rasmus Lerdorf 为了维护个人网站创建了 PHP Tools (Personal Home Page Tools),后经过重写又改名为 PHP (Hypertext Preprocessor)。PHP 的发展让 HTML 从纯粹的静态页面,变成了模板引擎。
    同年,网景推出 JavaScript,让网页可以有逻辑处理功能。
  • 1996 年,W3C 发布 CSS 1.0 标准。
    同年,微软推出 iframe 标签,实现了异步的局部加载。
  • 1997 年,微软发布的 IE4 中引入了 DHTML (Dynamic HTML, 动态 HTML),允许通过 HTML、CSS 和脚本语言来动态展示页面。但当时还没有 AJAX 技术,所以只是把网页内容都加载下来之后,根据脚本语言和事件交互来确定是否展示。
  • 1999 年,微软推出用于异步数据传输的 ActiveX,随即各大浏览器厂商模仿实现了 XMLHttpRequest,允许 JavaScript 发送 HTTP 请求,这为后来大行其道的 Ajax 创造了条件。2006 年,XMLHttpRequest 被 W3C 正式纳入标准。
  • 2000 年,KDE 项目重写了浏览器引擎 KHTML,为后来的 WebKit 和 Blink 引擎打下基础。
  • 2001 年,Douglas Crockford 提出了 JSON,用于取代 XML 格式,进行服务器和网页之间的数据交换。JavaScript 原生支持 JSON。
  • 2004 年,Google 公司发布了 Gmail,促成了互联网应用程序(Web Application)这个概念的诞生。
    同年,Dojo 框架诞生,为不同浏览器提供了同一接口,并为主要功能提供了便利的调用方法。这标志着 JavaScript 编程框架的时代开始来临。
    同年,各大浏览器厂商组成 WHATWG 小组,致力于加速 HTML 语言的标准化进程。
  • 2005 年,苹果公司在 KHTML 引擎基础上,建立了 WebKit 引擎。
    同年,Ajax (Asynchronous JavaScript and XML) 正式诞生,Jesse James Garrett 发明了这个词汇。
  • 2006 年,John Resig 发布了 JQuery,使得 JS 操作 DOM 更加方便。
    同年,Google推出 Google Web Toolkit 项目(缩写为 GWT),提供 Java 编译成 JavaScript 的功能,开创了将其他语言转为 JavaScript 的先河。
  • 2007 年,Webkit 引擎在 iPhone 手机中部署,JavaScript 进军手机。
  • 2009 年,Ryan Dahl 发布了 Node.js,它标志着 JavaScript 可以用于服务器端编程。
    同年,AngularJS 诞生,后被谷歌收购。
  • 2010 年,NPM(Node 模块管理器)、BackboneJS 和 RequireJS 的诞生标志着 JavaScript 进入模块化开发的时代。
  • 2012 年,单页面应用程序框架(single-page app framework)开始崛起,AngularJS 和 Ember 都发布了 1.0 版本。
    同年,微软发布 TypeScript 语言,该语言被设计为 JavaScript 的超集。
  • 2013 年,ECMA 正式推出 JSON 的国际标准。
    同年 5 月,Facebook 发布 UI 框架库 React,引入 JSX 语法,使得 UI 层可以用组件开发。
  • 2014 年,Vue.js 诞生。
  • 2015 年 3 月,Facebook 公司发布了 React Native 项目,将 React 框架移植到了手机端,可以用来开发手机 App。
    同年 5 月,Angular 框架宣布 2.0 将基于 TypeScript 开发。

参考资料

维基百科万维网
WWW 的原始提案
前端开发 20 年变迁史
URL 和 URI 的区别
菜鸟笔记 URL 和 URI 的区别
HTTP 的历史
维基百科 HTTP
HTML 的发展历史
CSS 二十年发展简史
CSS 传奇
维基百科浏览器大战
浏览器及其内核
JavaScript 语言的历史
维基百科 Dynamic HTML

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2018-2023 文初阳
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信