(Frontend Newbie)Web简史
前段时间在微博上看到有人问,前端这几年发展这么迅猛,各种新技术、新框架层出不穷,我们究竟怎么学习这些新技术才能跟得上脚步,毕竟精力有限,逐个学习不现实。个人认为,没有太大的必要去追逐那些新潮的技术。原因有二。不管目前前端再怎么发展都离不开JavaScript、HTML和CSS这三个基本要素,就像目前无论计算机如何发展都逃不脱图灵机和冯·诺依曼模型一样。如果连最基本的JS、HTML和CSS都还没有掌握,何谈技术框架,不过花拳绣腿而已。任何一种技术都有它产生的原因,或者说要解决的问题。只有了解了技术背后的东西才能了解技术本身,进而运用自如。
所以,既然从事了前端开发,就不能不去了解下web的历史。懒得自己整理了,以下部分摘自51CTO的在线电子书《Web之困:现代Web应用安全指南》,虽然该书侧重于Web安全方面,但是下面的摘录也足够简单了解Web的历史了。想要了解更多关于Web安全额信息,请移步《Web之困:现代Web应用安全指南》查阅。
史前时期的故事(1945~1994年)
计算机历史学家们都常以美国科学家Vannevar Bush3在1945年虚构出来的一台名为Memex的桌面设备作为Web理念最早期的原型。Memex 用于在微缩胶卷上创建和标注跨文档链接,并按照这些链接而跳转切换到所引用的其他微缩胶卷上,使用方式大略类似于我们现在的书签和超链接。Bush 大胆推测这种简单的功能将革命性地改变知识管理和数据挖掘的前景(令人莞尔的是,直到20世纪90年代初期,偶尔还有人觉得这种想法是愚笨且天真可笑的)。但当时并没有任何实际可用的设计,因此那时候它还仅是个充满未来憧憬的愿景而已,直到晶体管计算机登上了历史舞台的中心,一切才可能成真。
20世纪60年代是下一个历史里程碑。这时候诞生了IBM的GML(Generalized Markup Language,通用标记语言),它用可供机器读取识别的指令作为文档的标识符,以标志每段文本的功用,可以明确地指明“这里是文档的头部”,“这里是几个列表项目”诸如此类。在此后经过20多年的发展,GML(一开始只是用在一些IBM笨重大型机的文本编辑器里)逐渐演变成SGML(Standard Generalized Markup Language,标准通用标记语言)。SGML语言更通用灵活,它把GML原来基于冒号和句号的笨拙语法,改成了我们熟悉的尖括号格式的语法。
在GML进化到SGML的过程中,计算机也越来越强大和用户友好。几位研究人员开始试验Bush的跨链接概念,把它运用到计算机的文档存储和检索上,看是否可以基于某些关键字对一大堆文件进行交互索引。富有探索精神的各家公司和大学也推出了各种先驱型项目,如 ENQUIRE、NLS和 Xanadu,但这些项目中的大多数都失败了,未能产生持续的影响。这些项目的共同问题包括可用性太低,过于复杂,可扩展性差等。
历经10年之后,两位研究人员,Tim Berners-Lee 和Dan Connolly 开始寻找新的跨域引用方案—这个方案必须非常简洁明了。他们先草拟了HTML(HyperText Markup Language,超文本标记语言)规范,这是一套继承自SGML的精简版语言,特别针对带超链接和简单格式的文档进行了设计。在HTML方案之后,他们又进而开发了HTTP协议(HyperText Transfer Protocol ,超文本传输协议),这是一套利用当时已有的IP地址、域名和文件路径等概念,专用于访问HTML资源的非常基础的协议。他们研究工作的总成果就是这个诞生于 1991~1993之间由Tim Berners-Lee开发的World Wide Web 程序(如图1-1所示),这个最原始状态的浏览器可以解析HTML文件,还可以把用户提交的数据显示出来,并且只需要点击一下鼠标,就可以在不同页面之间切换浏览。
与其他心怀高远目标的竞争项目相比,很多人都觉得HTTP 和HTML 的设计简直是个巨大的倒退。毕竟,很多早期的构想都鼓吹自己包含数据库整合、安全和数字版权管理,或者整合了内容编辑和出版;即使Berners-Lee自己的另一个早期项目ENQUIRE看起来格局也更大一些。然而,因为HTTP和HTML的门槛低,即时可用,扩展性不受限制(正好与那时计算机的运算能力越来越强,价钱更为人接受,互联网也开始普及的时机相吻合),原先毫不起眼的WWW项目突然演变成一波热潮。
好吧好吧,这里的“热潮”是以20世纪90年代的标准来说的。很快,在互联网上就涌现出了10多种的Web服务器。到了1993年HTTP已经占美国科学基金会(National Science Foundation)骨干网总流量的0.1%。在同一年,Mosaic浏览器登场了,它由美国伊利诺伊大学(University of Illinois)开发,是第一款广泛使用的、成熟的Web浏览器。Mosaic 扩展了原先World Wide Web 的代码,增加的功能包括:在HTML文档里添加内嵌的图像,通过表单提交数据,奠定了今天交互式和多媒体应用的基础。
Mosaic使网页浏览变得更美观,也令使用者更容易接受Web方式。在20世纪90年代中期,Mosaic还是另外两个浏览器的基础:Mosaic Netscape(后来改名为Netscape Navigator)和Spyglass Mosaic(后来被微软收购并改名为Internet Explorer)。同时还有好几种非Mosaic引擎的同类竞争产品,包括Opera和其他几个基于文本的浏览器(例如, Lynx 和w3m)。很快,互联网上出现了第一个搜索引擎、在线报纸和约会网站。
第一次浏览器大战:1995~1999年
到20世纪90年代中期,很明显Web已经站稳了脚跟,用户也愿意为它放弃许多老旧的技术。此时尽管桌面软件巨鳄微软公司先前对互联网的跟进比较慢,现在也逐渐感到了不安,开始投入巨大的资源开发自己的浏览器,最终从1996年开始,Windows操作系统绑定安装了IE浏览器。微软在这段时间的举动引发了俗称的“浏览器大战”。
浏览器开发商之间的这场军备竞赛主要体现在各竞争产品都在非常快速地开发迭代,以及疯狂加入各种新功能,也就完全无法顾及产品是否符合规范标准,甚至来不及用正儿八经的文档记录下各种新代码新功能。对核心HTML特性的擅自调整包括各种蠢事(如闪烁的文字,这是Netscape的发明创造,但最终沦为笑柄)乃至一些著名的特性,如可更换字样(Typeface)或可以在所谓的框架(Frame)里嵌入外部文档。在各浏览器厂商的产品里,往往还内置对自家编程语言(如JavaScript和Visual Basic)支持,以及可在用户机器上执行跨平台Java或Flash小程序的插件,支持有用但颇诡异的各种HTTP扩展(如Cookie)。这一阶段的浏览器尽管囿于某些专利和商标上的原因,彼此间会有兼容性问题,但这些不兼容大都还比较表面。
随着Web的日益发展壮大和百花齐放,一种隐秘的恶疾悄然在浏览器引擎之间传播开来,尽管表面上还勉强维持着兼容性。这么做最开始的理由听上去还蛮合情合理的:如果浏览器A可以正常显示一个有问题的页面,而浏览器B却拒绝解析这个页面(无论基于何种原因),用户肯定会认为这是浏览器B有问题,而一股脑地选择貌似更强大的浏览器A。为了确保浏览器可以正确地显示任何网页,工程师的开发变得越来越复杂,也没有什么正式的文档来描述浏览器对于网站管理员胡乱提供的网页,是怎么进行主动猜测解析的,而在这些处理过程中往往会牺牲掉安全性,偶尔也会累及兼容性。遗憾的是,这样的变动往往又会进一步纵容各种不靠谱的网页设计观念,迫使其他浏览器开发商为免掉队,也只能亦步亦趋地跟进。当然,相关规范标准的细节缺失,更新也不及时,更是助长了这种恶疾的蔓延。
到1994年,为了解决开发上日益混乱的场面和管理HTML的升级扩展,Tim Berners-Lee和一群资助的公司创建了W3C理事会(World Wide Web Consortium)。遗憾的是,在很长一段时间内这个组织也只能眼睁睁地看着HTML标准被胡乱扩展和修改。最开始的时候W3C 只是想制定一个符合当时实际状况的HTML 2.0 和HTML 3.2 标准,但最后这些规范都只是半成品,因为等到公开发布之日,它们其实早就过时了。W3C也尝试过一些经过深思熟虑的创新项目,如层叠样式表(Cascading Style Sheet,CSS),但要浏览器开发商们接纳还需要一点时日。
另外像欧洲计算机制造者协会(European Computer Manufacturers Association,ECMA)、国际标准组织(International Organization for Standardization ,ISO)和互联网工程任务组(Internet Engineering Task Force ,IETF)等一些组织都企图对一些已实现的技术如HTTP 和 JavaScript做一些标准化和改进的工作。但可惜,各方的努力很少会相互通气协调,一些讨论和设计决策也往往由大公司和股东们控制,这些人根本不关心技术的长期前景。这样只会产生一些僵硬的标准,互相矛盾的建议,以及协议之间需要交互时各种有害的吓人的案例,实际上这些规范本可以设计得更好些—这个问题在第9章讨论到各种内容隔离机制时尤为明显。
平淡期:2000~2003年
围绕Web的争论仍然持续不断,由于操作系统绑定策略微软浏览器得以一家独大。十年之后,Netscape Navigator退出市场, Internet Explorer 获得80%的市场占有率—这差不多也是5年前Netscape 浏览器的占有率。在这场新功能的攀比大赛中,牺牲的主要就是安全性和可交互性,既然现在战争已结束,尘埃落定后开发者们想来应该可以搁置彼此的异见,坐下来对过往的混乱局面拨乱反正一下吧。
然而,垄断也滋生了自满:在得逞之后,微软就完全缺乏动力去改进自己的浏览器了。在IE5之前,微软每年发布一个新版本,然后足足过两年才推出IE6,其后更是用了漫长的5年才从IE6升级到IE7。既然微软不感兴趣,其他的浏览器厂商势单力孤,也很难带来什么翻天覆地的变化;而大部分网站也不愿为了极少数的访问者而修改不符合规范的网页。
而另一方面,缓慢的开发进展使W3C得以追上浏览器的实际状况,并认真探索未来Web的一些新概念。在2000年的时候出现的一些新变革包括HTML4(这是经过整理的HTML语言,废弃或禁用了早期HTML版本里的一些累赘功能或策略性错误)和 XHTML 1.1(这是一种格式很严格的结构化XML文档,不会产生模棱两可的解析,也不会需要浏览器主动猜测这类文件的属性问题)。W3C理事会更是对JavaScript 里的DOM(Document Object Model,文档对象模型)和CSS做了重大改良。但遗憾的是,到20世纪结束的时候,由于Web已经步入成熟,导致早期造下的祸端已没法一笔抹去,但同时它又仍处于青春期,所以这些安全问题又貌似还没到那么急迫和突显。尽管这时语法得到了改善,无用的标签被废弃了,各种验证器也写好了,江湖座次也已排定了,但浏览器差不多还是老样子:臃肿、古怪和难以预测。
不久发生了一件有趣的事情:微软推出了一个颇不起眼的专有API,名叫XMLHttpRequest,这个名字也颇让人摸不着头脑。这个新玩意儿本来并不重要,最开始这个API只是在微软Web版的Outlook应用里小试了一把牛刀。但最后XMLHttpRequest却大放异彩,因为它实现了客户端JavaScript 和服务器之间不受限制的异步HTTP通信,而无需额外的时间开销和页面重载。以这种方式,这个API更是对其后出现Web 2.0热潮推波助澜,Web 2.0就包括许多响应式的基于浏览器的复杂应用,用户能轻松使用复杂的数据集,方便地实现群体合作和个人内容出版等,它已经一脚踏入属于传统客户端的神圣领域里了,变成“真正的”软件了。可以理解,它引起了极大轰动。
Web 2.0 和第二次浏览器大战:2004年之后
伴随着互联网和各种浏览器的日益流行,XMLHttpRequest也把Web推到了激动人心的新高度,同时,也给我们带来了许多会影响个人和商业界的重大安全隐患。到2002年,蠕虫和浏览器漏洞变成了媒体上经常能看到的主题。由于微软的领导地位和对安全相对疏忽的态度,它承受了最多的公关压力。微软对这些问题一概视而不见,但这些压力积累发酵过后,终于造就了一次小规模的反抗。
到2004年,浏览器舞台上出现了一位新选手:Mozilla Firefox(原网景公司Navigator浏览器的后裔,由开源社区开发),它针对的正是IE糟糕的安全性和与标准的不兼容性。在获得IT专栏作家和安全专家的普遍肯定后,Firefox 很快获得了20%的市场份额。尽管这位后来者很快也被证明和微软浏览器一样,受到各种安全漏洞困扰,但由于Firefox的开源特性,以及无需迎合顽固的企业用户,使它的问题修复较为迅速及时。
注意 为什么浏览器开发领域里的竞争如此激烈呢?严格来说,浏览器的市场份额并没有办法直接转化成金钱收入。但专家们认为这关乎权势地位:因为可以通过浏览器来捆绑、推销或边缘化某个在线服务(即使像默认搜索引擎这么简单的服务),也就是说谁控制了浏览器,谁就控制了互联网。
除了Firefox,微软还有别的忧虑。随着越来越多的应用(从文本剪辑器到游戏)转而以Web方式运行,它的旗舰产品微软视窗操作系统正越来越沦为浏览器的工作平台。这显然是个不利的信号。
这些事实连同突然杀入市场的苹果公司浏览器Safari和Opera浏览器在智能手机领域的步步领先,一定使微软的高层深觉头痛不已。他们已经错失了20世纪90年代互联网第一波高潮;当然他们不想再犯同样的错误。微软重新加大了对IE浏览器的投入,发布了有极大提升和在某些方面来说更安全的版本,从IE7、8迅速迭代到了IE9。
IE的竞争对手们拿出了各种新功能与之对抗,甚至声称自己对标准的支持更好(虽然也只是表面上的)、浏览更安全、效率更为提高。XMLHttpRequest出乎意料之外的成功引人瞩目,大家迅速把过去的经验教训抛到了脑后,有时候也会单方面引入不成熟或不安全的设计,如 Firefox浏览器的globalStorage和IE的httponly Cookie,这完全就是在碰运气了。
好像还嫌事情不够混乱,由于对W3C理事会在创新性上的不满,一群参与者创建了一个全新的标准组织,叫网页超文本技术工作小组(Web Hypertext Application Technology Working Group,WHATWG)来主导HTML5协议的开发,这是对现有标准的第一次整体性和把安全也考虑进去的修订,但据报道,他们经常由于专利纷争而没法和微软达成一致。
在Web的整个发展历程中,由于缺乏统一的远景目标和完整的安全规范,其开发模式非常独特,整个发展过程竞争激烈、变幻莫测,与政治牵扯过多,结果错漏百出。这些问题都对浏览器现在的工作方式以及怎样安全地处理用户数据有深远的影响。
结语
在了解的Web的简要历史之后,相信对于一些最基本的困惑(比如为什么会有那么多的浏览器兼容性问题)会有一个简单的认识,后面在进一步学习和处理问题的时候,不至于觉得无所适从。