从在浏览器中输入网址,到屏幕上显示出相关网页的内容,这个只有几秒钟的过程,却需要很多硬件和软件在各自的岗位上相互配合完成的一系列工作,你知道这个过程中究竟发生了什么么?
下面我们就以探索之旅的形式,探索这一系列工作中的其中一个环节——浏览器是怎么生成消息的。
在开始探索之旅之前,我们准备了一些和本文内容有关的小问题,请大家先试试看。这些题目是否答得出来并不影响接下来的探索之旅,因此大家可以放轻松。
下列说法是正确的(√)还是错误的(×)?
1. http://www.nikkeibp.co.jp/ 中的www 代表World Wide Web 协议(对通信操作规则所作的定义)。
2. 个人也可以申请注册互联网中的域名。
3. 浏览器等网络应用程序实际上并不具备网络控制功能。
答案:
1. ×。http://www.nikkeibp.co.jp/ 中的www 只是Web 服务器上的一种命名。而且,World Wide Web 也不是一个协议的名字,而是Web 的提出者最早开发的浏览器兼HTML 编辑器的名字。
2. √。如果是 “.com” “.net” “.org” “.jp” (除 “co.jp” “ne.jp” 等“xx.jp”格式的域名外)等没有对注册对象范围进行限制的域名,任何个人都可以申请注册。此外,也有一种“.name”域名是专门为个人申请者准备的。
3. √。应用程序并不是自己去控制网络,而是委托操作系统来控制网络。
探索之旅从输入网址开始我们的探索之旅从在浏览器中输入网址开始,在介绍浏览器的工作方式之前,让我们先来介绍一下网址。网址,准确来说应该叫URL,如果我说它就是以http:// 开头的那一串东西,恐怕大家一下子就明白了,但实际上除了“http:”,网址还可以以其他一些文字开头,例如“ftp:”“ file:”“mailto:” 等。
之所以有各种各样的URL,是因为尽管我们通常是使用浏览器来访问Web服务器的,但实际上浏览器并不只有这一个功能,它也可以用来在FTP服务器上下载和上传文件,同时也具备电子邮件客户端的功能。可以说,浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要一些东西来判断应该使用其中哪种功能来访问相应的数据,而各种不同的URL 就是用来干这个的,比如访问Web 服务器时用“http:”,而访问FTP服务器时用“ftp:”。
图1.1 列举了现在互联网中常见的几种URL,根据访问目标的不同,URL 的写法也会不同。例如在访问Web 服务器和FTP 服务器时,URL 中会包含服务器的域名和要访问的文件的路径名等,而发邮件的URL 则包含收件人的邮件地址。此外,根据需要,URL 中还会包含用户名、密码、服务器端口号等信息。
尽管URL 有各种不同的写法,但它们有一个共同点,那就是URL 开头的文字,即“http:”“ftp:”“file:”“mailto:”这部分文字都表示浏览器应当使用的访问方法。比如当访问Web 服务器时应该使用HTTP协议,而访问FTP 服务器时则应该使用FTP 协议。因此,我们可以把这部分理解为访问时使用的协议类型。尽管后面部分的写法各不相同,但开头部分的内容决定了后面部分的写法,因此并不会造成混乱。
浏览器先要解析URL浏览器要做的第一步工作就是对URL 进行解析,从而生成发送给Web服务器的请求消息。刚才我们已经讲过,URL 的格式会随着协议的不同而不同,因此下面我们以访问Web 服务器的情况为例来进行讲解。
根据HTTP 的规格,URL 包含图1.2(a)中的这几种元素。当对URL进行解析时,首先需要按照图1.2(a)的格式将其中的各个元素拆分出来,例如图1.2(b)中的URL 会拆分成图1.2(c)的样子。然后,通过拆分出来的这些元素,我们就能够明白URL 代表的含义。例如,我们来看拆分结果图1.2(c),其中包含Web 服务器名称www.lab.glasscom.com,以及文件的路径名/dir1/file1.html,因此我们就能够明白,图1.2(b)中的URL 表示要访问www.lab.glasscom.com 这个Web 服务器上路径名为/dir/file1.html 的文件,也就是位于/dir/ 目录下的file1.html 这个文件(图1.3)。
省略文件名的情况图1.2(b)是一个以“http:”开头的典型URL,但有时候我们也会见到一些不太一样的URL,例如下面这个URL 是以“/”来结尾的。
(a)http://www.lab.glasscom.com/dir/
我们可以这样理解,以“/”结尾代表/dir/ 后面本来应该有的文件名被省略了。根据URL 的规则,文件名可以像前面这样省略。
不过,没有文件名,服务器怎么知道要访问哪个文件呢?其实,我们会在服务器上事先设置好文件名省略时要访问的默认文件名。这个设置根据服务器不同而不同,大多数情况下是index.html 或者default.htm 之类的文件名。因此,像前面这样省略文件名时,服务器就会访问/dir/index.html或者/dir/default.htm。
还有一些URL 是像下面这样只有Web 服务器的域名的,这也是一种省略了文件名的形式。
(b)http://www.lab.glasscom.com/
这个URL 也是以“/”结尾的,也就是说它表示访问一个名叫“/”的目录。而且,由于省略了文件名,所以结果就是访问/index.html 或者/default.htm 这样的文件了。那么,下面这个URL 又是什么意思呢?
(c)http://www.lab.glasscom.com
这次连结尾的“/”都省略了。像这样连目录名都省略时,真不知道到底在请求哪个文件了,实在有些过分。不过,这种写法也是允许的。当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是/index.html 或者/default.htm 这些文件,这样就不会发生混乱了。不过,下面这个例子就更诡异了。
(d)http://www.lab.glasscom.com/whatisthis
前面这个例子中,由于末尾没有“/”,所以whatisthis 应该理解为文件名才对。但实际上,很多人并没有正确理解省略文件名的规则,经常会把目录末尾的“/”也给省略了。因此,或许我们不应该总是将whatisthis 作为文件名来处理。一般来说,这种情况会按照下面的惯例进行处理:如果Web 服务器上存在名为whatisthis 的文件,则将whatisthis 作为文件名来处理;如果存在名为whatisthis 的目录,则将whatisthis 作为目录名来处理。
浏览器的第一步工作就是对URL 进行解析。
HTTP 的基本思路解析完URL 之后,我们就知道应该要访问的目标在哪里了。接下来,浏览器会使用HTTP 协议来访问Web 服务器,不过在介绍这一环节之前,我们先来讲一讲HTTP 协议到底是怎么回事。