
1.4 浏览器和网站之间的对话方法
大家上网时都是使用浏览器来显示各个网站上的信息,有时候还会向网站提交一些信息(如在论坛上发帖)。而网站也是计算机,它之所以能为我们提供这些服务,实际上就是浏览器和网站服务器等共同合作的结果。
两个人要合作完成某件事情,肯定离不开两个人的沟通交流。同样地,浏览器和网站服务器要为我们提供服务,这些相关的计算机(更准确地说是这些相应的软件)之间也需要沟通交流。人和人之间主要的交流方式就是语言,那么计算机和计算机之间的交流是怎么实现的呢?人类要指挥计算机完成各种任务,又是如何与计算机进行沟通呢?其实也是通过一些“语言”,只不过这些语言每种都有自己的适用范围,往往完成一项任务需要多种语言组合使用。
1.4.1 计算机之间对话的语言
计算机是科学家发明出来的,科学家们同样为计算机之间的对话也发明创造出很多的语言。为了统一和规范计算机之间的对话,科学家们首先为计算机对话语言设计和约定了层次化的结构,并在此基础上形成统一的主张和约束。而这些统一的规范化要求,又被称作“协议”“标准”“建议”“规范”等,并分别由一些专业化、国际化的组织负责维护和改进。
例如计算机要联网,那么首先要有一个网络接口,最常见的就是如图1-11所示的网卡和网线。科学家们为这些网卡和网线制定了相应的标准,这样只要不同厂家生产的计算机、网线、路由器等产品都遵循这些统一的标准,那么通过网络,就可以互相连接了。

图1-11 网线和接口
刚才说的网卡和网线,在整个层次结构中无疑处于比较低的层次,用专业术语来说,最低的层次就是“物理层”,例如,网线里面有几根芯、网线接头的形状等,都是物理层要解决的问题。
那么在物理层之上,就是计算机之间要完成交流的其他几个层级,如“网络层”使得计算机之间可以通过网络建立起连接。比如家里的计算机怎么会连得上淘宝的服务器呢?这就是网络层的功劳。
两台计算机之间建立起连接只是第一步,我们上网是为了浏览各个网站、使用QQ聊天、打游戏等。为了便于实现和使用这些服务,科学家们在网络层的上面,又设计了一个被称为“应用层”的层级,我们浏览网站使用的就是一种应用,QQ聊天使用的又是另一种应用,当然,一个游戏也可以是一种应用。
图1-12所示就是一个简化的示意图,描述的就是两台主机(不管是家里用的普通计算机、手机,还是专业的服务器)之间进行对话所用的各种语言的层次结构。

图1-12 计算机相互交流的语言层次结构(简化)
当然,除了前面说的物理层、网络层、应用层之外,还有其他的层加在一起共同构成了一个完整的、复杂的层级结构,不过这和本书的内容关系不是太大,感兴趣的同学以后可以找其他书籍继续学习。
1.4.2 浏览器和网站对话的语言
大家仔细想想平时上网的过程,一般都是先打开浏览器,在地址栏里输入要访问的服务器地址或者单击书签里收藏的服务器地址。这就是我们交给浏览器的指令,浏览器在收到这个指令后就要找相应的服务器去请求提供我们想要的信息,一般都是一些包含着文字、图片、声音等内容的网页。这里浏览器和网站之间的对话所使用的就是前面提到过的“应用层”中的一种语言,具体名称就是HTTP协议(HyperText Transfer Protocol,超文本传输协议)。和前面提到的专业术语一样,现在我们先不管它的具体含义,只需要了解HTTP协议是浏览器和网站服务器之间对话的语言就可以了。
在这个很简单的语言中,科学家们为浏览器和服务器预先定义了各自可以说的几个关键的、简单的句子,就靠这几个简单的句子,二者就可以互相配合为我们提供精彩的网络浏览服务了。
1.4.3 浏览器和网站对话的过程
一般来说,把网站那端提供服务的计算机(以及相应的软件)称作“服务器(Server)”或“服务器端”,把我们平常用接受服务的计算机,尤其是上面的浏览器软件,称作“客户端(Client)”或者“浏览器(Browser)”,把它们两个放在一起,就构成了专业人士所说的“C/S架构”或“B/S架构”,即“客户端/服务器架构”或“浏览器/服务器架构”。也就是说,作为浏览器和服务器之间对话的语言,HTTP协议是工作在“客户端/服务器”架构之上的,客户端使用HTTP“语言”向服务器请求提供服务,服务器应客户端的要求也使用HTTP“语言”提供相应的服务。这个过程可以用图1-13所示的简单的图画来表示。

图1-13 客户端/服务器架构的基本交互过程
只有请求和响应,是不是很简单?我们再具体看看请求和响应里面的内容,例如,客户端发出的请求,最常见的就是“GET请求”,我们都知道英文单词“GET”的意思就是“获取”。如果浏览器想要获取服务器上的一个名称为“fun.jpg”的图片,它就会向服务器发出下面这个请求。
GET /fun.jpg HTTP/1.1
HTTP是浏览器和服务器之间对话的语言,那么这句话用人类的语言进行完整的解释,就是浏览器使用1.1版本的HTTP语言告诉服务器它想要获取名称为“/fun.jpg”的资源。注意,这里使用了“资源”这个词,前面的“/”符号表示的是这个资源所在的位置。一般情况下,服务器上的很多资源都是以文件的形式保存在服务器的硬盘上。
服务器在收到浏览器的这个请求后,当然就需要给浏览器一个响应,即Response。具体是什么响应就看服务器这边的具体情况了,例如以下几种情况。
- 服务器上有这个资源,服务器就会说“好吧,给你。”(当然要用HTTP语言,不然的话浏览器也听不懂啊)。
- 服务器上根本没有这个资源,它就只好对浏览器说“你搞错啦,我这儿没有你想要的东西!”
- 服务器上虽然有这个资源,但由于劳累过度,服务器已经快瘫痪了,它就只能抱歉地通知浏览器:“对不起,我现在实在忙不过来了。”
- 服务器上虽然有这个资源,但来访的浏览器却没有权限访问,服务器也会毫不客气地告诉浏览器:“走开!你没有权利享用这个资源!”
HTTP是浏览器和服务器之间交谈的语言,是语言就有语法。很多同学一听到“语法”这个词就头疼。首先,请大家放心,HTTP语言很简单,语法也很简单,但是计算机对语法的遵循又是非常的严格,如果浏览器跟服务器说的话(即请求)不符合语法规范,服务器就会说“对不起,你说的话我不懂。”
1.4.4 人会犯错误,网站也会
“人非圣贤,孰能无过”,计算机和软件都是人设计制造的,既然人会出错,那么人制造出来的计算机出点儿错误就再正常不过了。
而网站呢?不管是运行网站的计算机,还是其上的各种软件,有错误也是难以避免的。有的错误是难以预测的,例如,运行过程中某个硬件突然坏了,这时候网站就很可能出现一些非常奇怪的现象和错误。还有些错误是由于设计人员的疏忽大意或者配合失误造成的。有些错误虽然存在但不会造成严重的影响,如缺图片等,也就是看起来别扭一点儿而已。而有些错误则会造成非常严重、非常巨大的灾难性后果,这样的案例也有很多,甚至有的公司就是因为网站的错误导致的后果太严重而破产倒闭了。对于我们这些网站的使用者来说,要记住网站也有可能存在严重错误,所以在浏览使用网站时,不要把任何信息都往上传。