从在浏览器中输入网址,到屏幕上显示出干系网页的内容,这个只有几秒钟的过程,却须要很多硬件和软件在各自的岗位上相互合营完成一系列的事情,你知道这个过程中究竟发生了什么么?
下面我们就以探索之旅的形式,探索这一系列事情中的个中一个环节——浏览器是怎么天生的。
在开始探索之旅之前,我们准备了一些和本文内容有关的小问题,请大家先试试看。这些题目是否答得出来并不影响接下来的探索之旅,因此大家可以放轻松。

下列说法是精确的(√)还是缺点的(×)?
http://www.nikkeibp.co.jp/ 中的www 代表World Wide Web 协议(对通信操作规则所作的定义)。个人也可以申请注册互联网中的域名。浏览器等网络运用程序实际上并不具备网络掌握功能。答案:
×。http://www.nikkeibp.co.jp/ 中的www 只是Web 做事器上的一种命名。而且,World Wide Web 也不是一个协议的名字,而是Web 的提出者最早开拓的浏览器兼HTML 编辑器的名字。√。如果是“.com”“.net”“.org”“.jp”(除“co.jp”“ne.jp”等“xx.jp”格式的域名外)等没有对注册工具范围进行限定的域名,任何个人都可以申请注册。此外,也有一种“.name”域名是专门为个人申请者准备的。√。运用程序并不是自己去掌握网络,而是委托操作系统来掌握网络。探索之旅从输入网址开始我们的探索之旅从在浏览器中输入网址开始,在先容浏览器的事情办法之前,让我们先来先容一下网址。网址,准确来说该当叫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 协议到底是怎么回事。
HTTP 协议定义了客户端和做事器之间交互的内容和步骤,其基本思路非常大略。首先,客户端会向做事器发送要求(图1.4)。要求中包含的内容是“对什么”和“进行若何的操作”两个部分。个中相称于“对什么”的部分称为URI。一样平常来说,URI 的内容是一个存放网页数据的文件名或者是一个CGI 程序的文件名,例如“/dir1/file1.html”“/dir1/program1.cgi”等。不过,URI 不仅限于此,也可以直策应用“http:”开头的URL 来作为URI。换句话说便是,这里可以写各种访问目标,而这些访问目标统称为URI。
相称于接下来“进行若何的操作”的部分称为方法。方法表示须要让Web 做事器完成若何的事情,个中范例的例子包括读取URI 表示的数据、将客户端输入的数据发送给URI 表示的程序等。表1.1 列举了紧张的方法,通过这张表大家该当能够理解通过方法可以实行若何的操作。
除了图1.4 中的内容之外,HTTP 中还有一些用来表示附加信息的头字段。客户端向Web 做事器发送数据时,会先发送头字段,然后再发送数据。不过,头字段属于可有可无的附加信息,因此我们暂时跳过。
收到要求之后,Web 做事器会对个中的内容进行解析,通过URI和方法来判断“对什么”“进行若何的操作”,并根据这些哀求来完本钱身的事情,然后将结果存放在相应中。在相应的开头有一个状态码,它用来表示操作的实行结果是成功还是发生了缺点。当我们访问Web 做事器时,碰着找不到的文件就会显示出404 Not Found 的缺点信息,实在这便是状态码。状态码后面便是头字段和网页数据。相应会被发送回客户端,客户端收到之后,浏览器会从中读出所需的数据并显示在屏幕上。到这里,HTTP 的全体事情就完成了。
现在大家该当已经理解了HTTP 的全貌,下面我们再补充一些关于HTTP 方法的知识。表1.1 列出的方法中,最常用的一个便是GET 方法了。一样平常当我们访问Web 做事器获取网页数据时,利用的便是GET 方法。所谓一样平常的访问过程大概便是这样的:首先,在要求中写上GET 方法,然后在URI 中写上存放网页数据的文件名“/dir1/file1.html”,这就表示我们须要获取/dir1/file1.html 文件中的数据。当Web 做事器收到后,会打开/dir1/file1.html 文件并读取出里面的数据,然后将读出的数据存放到相应中,并返回给客户端。末了,客户端浏览器会收到这些数据并显示在屏幕上。
还有一个常常利用的方法便是POST。我们在表单中填写数据并将其发送给Web 做事器时就会利用这个方法。当我们在网上商城填写收货地址和姓名,或者是在网上填写问卷时,都会碰着带有输入框的网页,而这些可以输入信息的部分便是表单。利用POST 方法时,URI 会指向Web 做事器中运行的一个运用程序的文件名,范例的例子包括“index.cgi”“index.php”等。然后,在要求中,除了方法和URI 之外,还要加上通报给运用程序和脚本的数据。这里的数据也便是用户在输入框里填写的信息。
当做事器收到后,Web 做事器会将要求中的数据发送给URI 指定的运用程序。末了,Web 做事器从运用程序吸收输出的结果,会将它存放到相应中并返回给客户端。
前面两个方法属于HTTP 的范例用法,除此之外的其他方法在互联网上险些见不到利用的例子。因此,只要理解了这两个方法,就能够搪塞大部分情形了,但如果可以,还是推举大家看一看表1.1 中所有方法的解释,思考一下它们的含义,以便理解HTTP 协议具备的所有功能。如果只有GET 和POST 方法,我们就只能从Web 做事器中获取网页数据,以及将网页输入框中的信息发送给Web 做事器,而有了PUT 和DELETE 方法,就能够从客户端修正或者删除Web 做事器上的文件。有了这些功能,我们乃至可以将Web 做事器当成文件做事器来用。当然,出于安全上的缘故原由,或者是支持GET 和POST 之外的方法的客户端没有广泛遍及之类的缘故原由,一样平常我们并不会碰到这样的用法,但大家该当能够看出,HTTP 协议实在蕴藏着很多的可能性。
天生HTTP 要求理解了HTTP 的基本知识之后,让我们回到对浏览器本身的探索中来。
对URL 进行解析之后,浏览器确定了Web 做事器和文件名,接下来便是根据这些信息来天生HTTP 要求了。实际上,HTTP 在格式上是有严格规定的,因此浏览器会按照规定的格式来天生要求(图1.5)。
首先,要求的第一行称为要求行。这里的重点是最开头的方法,方法可以见告Web 做事器它该当进行若何的操作。不过这里必须先办理一个问题,那便是方法有很多种,我们必须先判断该当选用个中的哪一种。
办理这个问题的关键在于浏览器的事情状态。这次探索之旅是从在浏览器顶部的地址栏中输入网址开始的,但浏览器并非只有在这一种场景下才会向Web 做事器发送要求。比如点击网页中的超级链接,或者在表单中填写信息后点击“提交”按钮,这些场景都会触发浏览器的事情,而选用哪种方法也是根据场景来确定的。
我们的场景是在地址栏中输入网址并显示网页,因此这里该当利用GET方法。点击超级链接的场景中也是利用GET 方法。如果是表单,在HTML源代码中会在表单的属性中指定利用哪种方法来发送要求,可能是GET 也可能是POST(图1.6)。
写好方法之后,加一个空格,然后写URI。URI 部分的格式如下,一样平常是文件和程序的路径名。
/< 目录名>/…/< 文件名>
前面已经讲过,路径名一样平常来说已经包含在URL 中了,因此只要从URL 中提取出来原封不动地写上去就好了。
第一行的末端须要写上HTTP 的版本号,这是为了表示该是基于哪个版本的HTTP 规格编写的。到此为止,第一行就结束了。
第二行开始为头。只管通过第一行我们就可以大致理解要求的内容,但有些情形下还须要一些额外的详细信息,而头的功能便是用来存放这些信息。头的规格中定义了很多项目,如日期、客户端支持的数据类型、措辞、压缩格式、客户端和做事器的软件名称和版本、数据有效期和末了更新韶光等。这些项目表示的都是非常细节的信息,因此要想准确理解这些信息的意思,就须要对HTTP 协议有非常深入的理解。表1.2中列举了紧张的头字段供大家参考,但不必全部弄明白。头中的内容随着浏览器类型、版本号、设置等的不同而不同,大多数情形下头的长度为几行到十几行不等。
写完头之后,还须要添加一个完备没有内容的空行,然后写上须要发送的数据。这一部分称为体,也便是的主体。不过,在利用GET 方法的情形下,仅凭方法和URI,Web 做事器就能够判断须要进行若何的操作,因此体中不须要填写任何数据。体结束之后,全体也就结束了。
当利用POST 方法时,须要将表单中填写的信息写在体中。到此为止,要求的天生操作就全部完成了。
发送要求后会收到相应当我们将上述要求发送出去之后,Web 做事器会返回相应。关于相应我们在这里先粗略地理解一下。相应的格式以及基本思路和要求是相同的(图1.5(b)),差别只在第一行上。在相应中,第一行的内容为状态码和相应短语,用来表示要求的实行结果是成功还是出错。状态码和相应短语表示的内容同等,但它们的用场不同。状态码是一个数字,它紧张用来向程序奉告实行的结果(表1.3);相对地,相应短语则是一段笔墨,用来向人们奉告实行的结果。
返回相应之后,浏览器会将数据提取出来并显示在屏幕上,我们就能够看到网页的样子了。如果网页的内容只有笔墨,那么到这里就全部处理完毕了,但如果网页中还包括图片等资源,则还有下文。
当网页中包含图片时,会在网页中的相应位置嵌入表示图片文件的标签的掌握信息。浏览器会在显示笔墨时搜索相应的标签,当碰着图片干系的标签时,会在屏幕上留出用来显示图片的空间,然后再次访问Web 做事器,按照标签中指定的文件名向Web 做事器要求获取相应的图片并显示在预留的空间中。这个步骤和获取网页文件时一样,只要在URI 部分写上图片的文件名并天生和发送要求就可以了。
由于每条要求中只能写1 个URI,以是每次只能获取1 个文件,如果须要获取多个文件,必须对每个文件单独发送1 条要求。比如1 个网页中包含3 张图片,那么获取网页加上获取图片,一共须要向Web 做事器发送4 条要求。
判断所需的文件,然后获取这些文件并显示在屏幕上,这一系列事情的整体指挥也是浏览器的任务之一,而Web 做事器却绝不知情。Web 做事器完备不关心这4 条要求获取的文件到底是1 个网页上的还是不同网页上的,它的任务便是对每一条单独的要求返回1 条相应而已。
到这里,我们已经先容了浏览器与Web 做事器进行交互的全体过程。作为参考,图1.7 展示了浏览器与Web 做事器之间交互的一个实例。在这个例子中,我们须要获取一张名为sample1.htm 的网页,网页中包含一张名为picture.jpg 的图片,图中展示了这个过程中产生的。
1 条要求中只能写1 个URI。如果须要获取多个文件,必须对每个文件单独发送1 条要求。
上面内容是网络连接内容的一个小小的点,连续学习网络是若何连接的,可以读《网络是若何连接的》,本文内容就节选自它,它这天系图解版“打算机网络概论”,在豆瓣收成9.2分好评,它涵盖了网络的全貌。
即便不提互联网(Internet),大家也都知道网络是一个巨大而繁芜的系统,因此用一本书的篇幅涵盖所有的知识是不可能的。
不过,我们可以开启探索之旅,从在浏览器中输入网址(比如 http://www.nikkeibp.co.jp/)开始,一起追踪到显示出网页内容为止的全体过程,这样就能够用一本书的篇幅讲清楚网络的全貌了。
之以是要掌握在一本书的篇幅,是由于:如果只是讲解 TCP/IP、以太网这些单独的技能,读者就无法理解网络这个别系的全貌;如果无法理解网络的全貌,也就无法理解每一种网络技能背后的实质意义;而如果无法理解实在质意义,就只能勾留在去世记硬背的程度,无法做到实际运用。为了避免这一点,即便一本书的篇幅只能先容有限的一些场景,我们也依然可以涵盖网络系统的全貌。
其次,本书重点先容了实际的网络设备和软件是如何事情的。TCP/IP、以太网等技能,可以理解为规定网络设备和软件如何事情的一种规则。尽管理解这些规则很主要,但仅仅学习这些规则是无法看到设备和软件的内部布局的。这是由于,为了减少设备生产和软件开拓上的制约,网络中的规则将设备和软件的内部布局看作一个黑箱,只从外部视角规定了这些设备和软件的事情办法。而且,实际的设备和软件中还包含很多规则中所没有规定的要素。要想闇练利用网络技能,理解实际的设备和软件是非常主要的,但这一点单靠学习规则本身是无法做到的。考虑到上述缘故原由,本书将重点先容设备和软件的内部事情办法。
正是由于本书的上述特色受到了读者的好评(至少笔者是这样认为的),第 1 版的销量远远超出了笔者的预期。这是一件值得高兴的事,但也暴露出一些问题。由于读者群之广,远远超过了当初设想的范围。要理解实际设备和软件的事情办法,须要一定程度的根本知识,而第 1 版中对这些内容的讲解并不充分。因此,在第 2 版的编写中,笔者将这部分内容作为重点,全面修订了讲解的内容,大幅增加了对付根本知识的先容。结果,这本书的篇幅比第 1 版增加了将近 100 页,这也充分表示了这次修订的成果。
图书内容构造第 1 章 Web浏览器
首先探索了浏览器的事情办法。大家可以认为我们的探索之旅是从在浏览器中输入网址(URL)开始的。例如,当我们输入下面这样的网址时,浏览器就会按照一定的规则去剖析这个网址的含义,然后根据其含义天生要求。
http://www.lab.glasscom.com/sample1.html
在上面这个例子中,浏览器天生的要求表示“请给我 sample1.html 这一文件中储存的网页数据”,接着浏览器会将要求发送给 Web 做事器。
当然,浏览器并不会亲自大责数据的传送。传送是搬运数字信息的机制卖力的事情,因此浏览器会委托它将数据发送出去。详细来说,便是委托操作系统中的网络掌握软件将发送给做事器。第 1 章中,我们会探索到浏览器将数据委托出去为止。
第 2 章 协议栈、网卡
第 2 章我们将探索搬运数据的机制。个中最先出场的是协议栈(网络掌握软件叫作协议栈)。这个软件会将从浏览器吸收到的打包,然后加上目的地址等掌握信息。如果拿邮局来比喻,便是把信装进信封,然后在信封上写上收信人的地址。这个软件还有其他一些功能,例如当发生通信缺点时重新发送包,或者调节数据发送的速率等,或许我们可以把它当作一位帮我们寄信的小秘书。
接下来,协议栈会将包交给网卡(卖力以太网或无线网络通信的硬件)。然后,网卡会将包转换为电旗子暗记并通过网线发送出去。这样一来,包就进入到网络之中了。
第 3 章 集线器、交流机、路由器
接下来出场的物品会根据接入互联网的形式不同而不同。客户端打算机可以通过家庭或公司的局域网接入互联网,也可以单独直接接入互联网。很遗憾,我们的探索之旅无法涵盖所有这些可能性,因此只能以现在最范例的场景为例,假设客户端打算机是连接到家庭或公司的局域网中,然后再通过 ADSL 和光纤到户(FTTH)等宽带线路接入互联网。
在这样的场景中,网卡发送的包会经由交流机等设备,到达用来接入互联网的路由器。路由器的后面便是互联网,网络运营商会卖力将包送到目的地,就彷佛我们把信投到邮筒中之后,邮递员会卖力把信送给收件人一样。
第 4 章 接入网、网络运营商
接下来,数据从用来接入互联网的路由器出发,进入了互联网的内部。互联网的入口线路称为接入网。一样平常来说,我们可以用电话线、ISDN、 ADSL、有线电视、光芒、专线等多种通信线路来接入互联网,这些通信线路统称为接入网。接入网连接到签约的网络运营商,并接入被称为接入点(Point of Presence,PoP)的设备。
接入点的实体是一台专为运营商设计的路由器,我们可以把它理解为离你家最近的邮局。从各个邮筒中网络来的信件会在邮局进行分拣,然后被送往全国乃至全天下,互联网也是一样,网络包首先通过接入网被发送到接入点,然后再从这里被发送到全国乃至全天下。接入点的后面便是互联网的骨干部分了。
在骨干网中存在很多运营商和大量的路由器,这些路由器相互连接,组成一张巨大的网,而我们的网络包就在个中经由多少路由器的接力,终极被发送到目标 Web 做事器上。个中的详细细节我们会在正文中进行讲解,但实在它的基本事理和家庭、公司中的路由器是相同的。也便是说,无论是在互联网中,还是在家庭、公司的局域网中,包都因此相同的办法传输的,这也是互联网的一大特色。
不过,运营商利用的路由器可跟我们家用的小型路由器不一样,它是一种可以连接几十根网线的高速大型路由器。在互联网的骨干部分,存在着大量的这种路由器,它们之间以繁芜的形式连接起来,而网络包就在这些路由器之间穿行。
此外,路由器不但在规模上存在差异,在路由器间的连接办法上也存在差异。家庭和公司局域网中一样平常采取以太网线进行连接,而互联网中除了以太网线连接之外,还会利用比较古老的电话技能和最新的光通信技能来传送网络包。这一部分所利用的技能是当今网络中最热门的部分,可以说是最尖端技能的结晶。
第 5 章 防火墙、缓存做事器
通过骨干网之后,网络包终极到达了 Web 做事器所在的局域网中。接着,它会碰着防火墙,防火墙会对进入的包进行检讨。大家可以把防火墙想象成门口的保安,他会检讨所有进入的包,看看有没有危险的包混在里面。检讨完之后,网络包接下来可能还会碰着缓存做事器。网页数据中有一部分是可以重复利用的,这些可以重复利用的数据就被保存在缓存做事器中。如果要访问的网页数据恰好在缓存做事器中能够找到,那么就可以不用劳烦 Web 做事器,直接从缓存做事器读出数据。此外,在大型网站中,可能还会配备将分布到多台 Web 做事器上的负载均衡器,还有可能会利用通过分布在全体互联网中的缓存做事器来分发内容的做事。经由这些机制之后,网络包才会到达 Web 做事器。
第 6 章 Web做事器
当网络包到达 Web 做事器后,数据会被解包并还原为原始的要求,然后交给 Web 做事器程序。和客户端一样,这个操作也是由操作系统中的协议栈(网络掌握软件)来完成的。接下来,Web 做事器程序剖析要求的含义,并按照个中的指示将数据装入相应中,然后发回给客户端。相应回到客户真个过程和之前我们先容的过程恰好相反。
当相应到达客户端之后,浏览器会从中读取出网页的数据并在屏幕上显示出来。到这里,访问 Web 做事器的一系列操作就全部完成了,我们的探索之旅也到达了终点。
各章的构造
各章的内容分为热身问答、探索之旅的看点、正文、小测验几个部分,还有多少个专栏。
热身问答在各章的开头有一些大略的热身题,都是判断对错的题目,大家一定要试试看。
探索之旅的看点探索之旅的看点总结了正文将要先容的主题,可以以此来理解该章的梗概。
正文熟习了看点之后就该正式出发了。在这一部分,我们将约请履历丰富的导游来进行讲解,相信即便是不具备任何网络知识的读者也能够想象涌实际中网络的样子。请大家静下心来,逐步欣赏。
小测验这是一些和正文内容干系的测试题,大家可以用这些题目来确认自己的理解程度。答案位于下一页中的专栏的末了。
专栏“网络术语实在很大略”在专栏中,探索队长和探索队员会以对话的形式先容一些网络术语的词源。这些术语大家平时可能觉得很难,但通过理解它们的词源,就能够理解实在质含义。读完这部分会让你以为这些术语变得亲切了。
关于插图在画图时,一样平常来说箭头都是从左到右绘制的,但本书则恰好相反,是从右到左绘制的,这是为了和先容包格式的图以及先容旗子暗记波形的图的位置关系保持同等。箭头的方向和一样平常的习气相反,这一点希望大家理解。
——
【图灵教诲】
阅读改变天下,阅读塑造人生
让我们站在巨人的肩膀上,解锁更多IT技能!