混沌初开,一切都那么简单。为了连接美国的少数几个顶尖研究机构,人们设计了最早的“Internet”,以便共同开展科学研究。不论是图书馆员、核物理学家,还是计算机科学家,都必须学习一个相当复杂的系统。1962年,麻省理工学院(MIT)的J.C.R.Licklider最早提出他的“GalacticNetwork”(超大网络)思想时,Firefox和IE之类的便捷工具连概念都未产生。Licklider后来继续在美国国防高级研究计划局(DARPA)从事计算机研究,在那里他积极地宣扬网络化思想的重要性。几乎与此同时,MIT的LeonardKleinrock和LawrenceG.Roberts正在开展分组交换理论的研究,这是计算机联网的一个核心概念。在ThomasMerrill的帮助之下,Roberts于1965年进而创建了第一个广域网,他通过一个拨号连接使马萨诸塞州的一台TX-2连上了加利福尼亚州的一台Q-32。1966年底,Roberts带着他的实验结果来到DARPA,在这里他构思了高级研究项目管理网络(AdvancedResearchProjectsAdministrationNetwork,ARPANET)的计划。此时,Kleinrock正在加州大学洛杉矶分校网络测量中心(NetworkMeasurementCenter),这里被选作ARPANET的第一个节点。正是在这里,1969年BBN公司成功地安装了第一个分组交换器,称为接口消息处理器(InterfaceMessageProcessors,IMP)。斯坦福研究中心被选为第二个节点,1969年10月,在此首次实现了主机到主机的消息交换。此后不久,又将加州大学圣巴巴拉分校和犹他大学增加为节点,这就是我们现在所称因特网的前身。这个时期小型机刚开始出现,DEC公司推出了PDP-1,其后又相继推出了PDP-8、PDP-11和VAX-11/780,并取得了巨大成功。计算机能力得到了极大增强,而且使用也越来越方便,不像最初只有极少的几台大型机时,人们须排队使用。计算机已经更加平民化;不过,这时个人计算机革命还未到来。最初,研究人员认为TCP协议只适用于大型系统,因为TCP就是为大型系统设计的。不过,麻省理工学院DavidClark的研究小组发现,工作站也可以与大型机互联。Clark的研究,再加上20世纪80年代和90年代个人计算机领域的爆炸式发展,为网络的发展铺平了道路。20世纪80年代出现了几个大变化。随着主机数量从很少发展到成千上万,需要为主机指定不同的名字,这样人们就不用费劲地去记它们的数字地址。这个变化,以及主机数量的飞速增长,催生了DNS。另外,ARPANET从使用NCP转为使用TCP/IP协议,后者是军方使用的标准协议。到了20世纪80年代中期,因特网已经建成为一个连接不同研究人员群体的平台,而且其他网络也开始出现:美国国家航空航天局(NASA)创建了SPAN;美国能源部建立了MFENet来研究磁聚变能源,另外在美国国家科学基金会(NationalScienceFoundation)的资助下,还创建了CSNET来开展计算机科学研究。1989年,欧洲粒子物理研究中心(CERN)的TimBerners-Lee提出了一个很有意思的概念。他认为,与其简单地引用其他人的著作,不如进行实际的链接呢?读一篇文章时,读者可以打开所引用的其他文章。超文本(hypertext)当时相当流行,Berners-Lee还利用了他先前在文档和文本处理方面的研究成果,发明了标准通用标记语言(StandardGeneralizedMarkupLanguage,SGML)的一个子集,称为超文本标记语言(HyperTextMarkupLanguage,HTML)。HTML的妙处在于,它能将有关文本显示方式的信息与具体显示的实现相分离。Berners-Lee不仅创建了一个称为超文本传输协议(HyperTextTransferProtocol,HTTP)的简单协议,还发明了第一个Web浏览器,叫做WorldWideWeb。提到Web浏览器,大多数人都会想到无处不在的MicrosoftInternetExplorer,直到最近像Firefox、Safari和Opera之类的浏览器日益兴起,这种情况才稍有改观。许多新手可能会误认为IE是市场上的第一个浏览器,其实不然。实际上,第一个Web浏览器出自Berners-Lee之手,这是他为NeXT计算机创建的(这个Web浏览器原来取名叫WorldWideWeb,后来改名为Nexus),并在1990年发布给CERN的人员使用。Berners-Lee和Jean-FrancoisGroff将WorldWideWeb移植到C,并把这个浏览器改名为lib。20世纪90年代初出现了许多浏览器,包括NicolaPellow编写的行模式浏览器(这个浏览器允许任何系统的用户都能访问Internet,从Unix到MicrosoftDOS都涵盖在内),还有Samba,这是第一个面向Macintosh的浏览器。1993年2月,伊利诺伊大学Urbana-Champaign分校美国国家超级计算应用中心的MarcAndreessen和EricBina发布了Unix版本的Mosaic。几个月之后,AleksTotic发布了Mosaic的Macintosh版本,这使得Mosaic成为第一个跨平台浏览器,它很快得到普及,并成为最流行的Web浏览器[1]。这项技术后来卖给了Spyglass,最后又归入Microsoft的门下,并应用在InternetExplorer中。1993年,堪萨斯大学的开发人员编写了一个基于文本的浏览器,叫做Lynx,它成为了字符终端的标准。1994年,挪威奥斯陆的一个小组开发了Opera,到1996年这个浏览器得到了广泛使用。1994年12月,Netscape发布了Mozilla的1.0版,第一个盈利性质的浏览器从此诞生。2002年又发布了一个开源的版本,这最终发展为2004年11月发布的、现在十分流行的Firefox浏览器。当Microsoft发布Windows95时,IE1.0是作为MicrosoftPlus!包的一部分同时发布的。尽管这个浏览器与操作系统集成在一起,但大多数人还是坚持使用Netscape、Lynx或Opera。IE2.0有了很大起色,增加了对cookie、安全套接字层(SecureSocketLayer,SSL)和其他新兴标准的支持。2.0版还可以用于Macintosh,从而成为Microsoft的第一个跨平台浏览器。不过,大多数用户还是很执着,仍然坚持使用他们习用的浏览器。不过到了1996年夏天,Microsoft发布了IE3.0版。几乎一夜之间,人们纷纷拥向IE。当时,Netscape的浏览器是要收费的,Microsoft则免费提供IE。关于浏览器领域谁主沉浮,因特网社区发生了两极分化,很多人担心Microsoft会像在桌面领域一样,在Web领域也一统天下。有些人则考虑到安全因素——果然不出所料,发布3.0版9天之后就报告了第一个安全问题。但是到1999年发布IE5时,它已经成为使用最广的浏览器。最初,所有Web页面都是静态的,用户请求一个资源,服务器再返回这个资源。什么都不动,什么都不闪。坦率地讲,对于许多Web网站来说,这样也是可以的,这些网站的Web页面只是电子形式的文本,在一处生成,内容固定,再发布到多处。在浏览器发展的最初阶段,Web页面的这种静态性不成问题,科学家只是使用因特网来交换研究论文,大学院校也只是通过因特网在线发布课程信息。企业界还没有发现这个新“渠道”会提供什么商机。实际上,以前公司主页显示的信息通常很少,无非是一些联系信息或者只是一些文档。不过没过多久,Web用户就开始有新的要求了,希望能得到更动态的网上体验。个人计算机成为企业不可或缺的资源,而且从个人宿舍到住家办公室开始出现越来越多的计算机。随着Windows95的问世,随着人们已经领教了CorelWordPerfect和MicrosoftExcel丰富的功能,用户的期望也越来越高。1.3.1CGI要让Web更为动态,第一个办法是公共网关接口(CommonGatewayInterface,CGI)。与静态的Web获取不同,使用CGI可以创建程序,当用户发出请求时就会执行这个程序。假设要在Web网站上显示销售的商品,你可以利用CGI脚本来访问商品数据库,并显示结果。通过使用简单的HTML表单和CGI脚本,可以创建简单的网上店面,这样别人就可以通过浏览器来购买商品。编写CGI脚本可以用多种语言,从Perl到VisualBasic都可以,这使得掌握不同编程语言的人都能编写CGI脚本。不过,要创建动态的Web页面,CGI并不是最安全的方法。如果采用CGI,将允许别人在你的系统上执行程序。大多数情况下这可能没有问题,但是倘若某个用户有恶意企图,则很可能会利用这一点,让系统运行你本来不想运行的程序。尽管存在这个缺陷,到如今CGI仍在使用。1.3.2applet很显然,CGI可以有所改进。1995年5月,Sun公司的JohnGage和Andreessen(目前在Netscape通信公司)宣布一种新的编程语言诞生,这就是Java。NetscapeNavigator为这种新语言提供了支持,最初是为了支持机顶盒。(你可能原认为最早涉足智能家居的公司是Microsoft和Sony其实不然。)就像所有革命都机缘巧合一样,Java和因特网的出现恰到好处,在适当的时间、适当的地点横空出世,Java在Web上发布仅几个月,就已经有成千上万的人下载。由于Netscape的Navigator支持Java,动态Web页面掀开了新的一页:applet时代到来了。applet允许开发人员编写可嵌入在Web页面上的小应用程序。只要用户使用支持Java的浏览器,就可以在浏览器的Java虚拟机(JavaVirtualMachine,JVM)中运行applet。尽管applet可以做很多事情,但它也存在一些限制:通常不允许它读写文件系统,它也不能加载本地库,而且可能无法启动客户端上的程序。除了这些限制外,applet是在一个沙箱安全模型中运行的,这是为了有助于防止用户运行恶意代码。对许多人来说,最初接触Java编程语言就是从applet开始的,当时这是创建动态Web应用的一种绝好的方法。applet允许你在浏览器中创建一个胖客户应用,不过要在平台的安全限制范围内。当时,在很多领域都广泛使用了applet,但是,Web社区并没有完全被applet“征服”[2]。胖客户的开发人员都很熟悉一个问题:必须在客户端上部署适当的Java版本。因为applet在浏览器的虚拟机中运行,所以开发人员必须确保客户端安装了适当版本的Java。尽管这个问题也可以解决,但它确实妨碍了applet技术的进一步推广。而且如果applet写得不好,很可能对客户主机造成影响,这使许多客户对于是否采用基于applet的解决方案犹豫不定。如果你还不太熟悉applet,请看图1-1,图中显示了Sun公司提供的时钟applet。图1-1Sun的时钟applet1.3.3JavaScript与此同时,Netscape创建了一种脚本语言,并最终命名为JavaScript(建立原型时叫做Mocha,正式发布之前曾经改名为LiveWire和LiveScript,不过最后终于确定为JavaScript)。设计JavaScript是为了让不太熟悉Java的Web设计人员和程序员能够更轻松地开发applet(当然,Microsoft也推出了与JavaScript相对应的脚本语言,称为VBScript)。Netscape请BrendanEich来设计和实现这种新语言,他认为市场需要的是一种动态类型脚本语言。由于缺乏开发工具,缺少有用的错误消息和调试工具,JavaScript很受非议,但尽管如此,JavaScript仍然是一种创建动态Web应用的强大方法。最初,创建J