Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1781030
  • 博文数量: 413
  • 博客积分: 8399
  • 博客等级: 中将
  • 技术积分: 4325
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-09 10:44
文章分类

全部博文(413)

文章存档

2015年(1)

2014年(18)

2013年(39)

2012年(163)

2011年(192)

分类: LINUX

2012-01-20 22:38:30

第27章——万维网(HTTP)

1. 万维网目前成为因特网主干带宽的最大使用者,并自此一直保持着领先地位。与任何其他因特网应用相比,知
道和使用万维网的人是最多的。事实上,对于大多数用户而言,因特网就是万维网。

2. 体系结构组成
万维网由通过因特网能访问到的大量文档构成,这些文档称为万维网页面(web page)。一个页面就是一个超媒体 (hypermedia)文档。后缀media 表示文档还可以包含除文本以外的其他项目(如图形图像),而之所以使用前缀hyper,是因为文档中可以包含指向其他相关文档的可选择链接(selectable link)。

万维网需要使用两个主要构建模块。万维网浏览器(web browser)由一个应用程序构成,用户调用该程序访问和显示万维网页面。浏览器作为客户联络相应的万维网服务器(web server),得到指定页面的副本。由于一个给定的服务器可以管理多个万维网页面,所以在请求时浏览器必须指明确切的页面。

3. 超文本传送协议(HTTP)
在浏览器和web服务器或中间机器和服务器之间进行通信时所使用的协议称为超文本传送协议(HyperText Transfer Protocol,简称HTTP)。HTTP有以下几个特点:
1)是应用层协议;
2)请求/响应机制;
3)无状态;
4)双向传输;
5)协商能力;
6)支持缓存;
7)支持代理;

4. 长连接和长度
HTTP 的第一个版本遵循与FTP 一样的模式,即为每个数据传送使用一个新的TCP 连接。客户打开一条TCP连接,发送一个GET请求。服务器传送被请求的项目的副本,然后关闭TCP连接。因此,客户会一直从TCP连接读取数据,直到遇到文件尾(end of file),然后客户关闭它这一端的连接。

HTTP 的版本1.1 从根本上改变了基本HTTP 模式。版本1.1 并不是为每个传送使用一条TCP连接,而是采用持久连接(persistent connection)作为默认方法。也就是说,一旦客户打开了和特定服务器之间的一条TCP 连接,客户就让该连接在多个请求和响应过程中一直存在。当客户或服务器准备关闭连接时,则通知另一端,然后关闭该连接。

持久连接的主要优点在于减少额外开销。TCP连接越少,就意味着响应时间、底层网络上的额外开销、缓冲区使用的内存和使用CPU 的时间就会更少。

使用持久连接的主要缺点在于,需要标识通过连接发送的每一项的开头和结尾。HTTP采用了先发送长度,然后发送具有该长度的数据项的方法

为了允许TCP连接在多个请求和响应中持久存在,HTTP要在每个响应前先发送长度。如果服务器不知道数据的长度(比如CGI等动态生成的网页),它就要通知客户,发送响应,然后关闭连接。

5. 长度编码和首部
服务器发送长度信息时使用什么样的表示法呢?有趣的是,HTTP借用了电子邮件的基本格式,使用2822 格式和MIME 扩充。与标准的2822 报文类似,每个HTTP传送都包含一个首部、一个空行和要发送的数据项。此外,首部中的每一行都包含一个关键字、一个冒号和信息。下面是可能的首部以及它们的含义:
除了图中所示以外,HTTP还包括各种各样的首部,以允许浏览器和服务器交换元信息
例如,如果服务器不知道数据项的长度,那么服务器会在发送完数据项后通知浏览器,希望关闭连接。为此,服务器在数据项之前包含了一个Connection首部,以代替Content-Length首部:
Connection:close
当浏览器接收到一个时,它就知道服务器要在传送后关闭连接,禁止浏览器继续发送更多的请求。

6. 浏览器和服务器的协商机制
HTTP 还使用首部来允许客户和服务器协商(negotiate)能力。可协商的一组能力包括有关连接(访问是否是经过授权)、表示法(是否接受jpeg格式的图形图像或使用哪种类型的压缩格式)、内容(文本文件是否必须是英文)以及控制(页面保持有效的时间长度)等各个方面的特征。

有两种类型的协商:服务器驱动(server-driven)和代理驱动(agent-driven)(即浏览器驱动)。
1)服务器驱动是从浏览器发出请求开始的。在指明所要求数据项的URL 的同时,请求也会指明首选列表。服务器从可用的表示法中选出符合浏览器首选要求的一项。如果有多项符合条件,则服务器进行“最佳猜测”。
2)代理驱动协商意味着浏览器用两步过程完成选择。首先,浏览器向服务器发送请求,询问可用的内容,服务器返回可能的内容列表。浏览器从中选择一个,发送第二个请求,以获得该数据项。

浏览器使用HTTP Accept首部指明哪种媒体或表示法是可接受的。在首部中列出了格式的名称以及分配给每个名称的首选值:如:Accept: text/html, text/plain; q = 0.5, text/x-dvi; q = 0.8
这个例子指明浏览器希望接受text/html 媒体类型,但是如果该类型不存在,则浏览器将接受text/x-dvi,并且如果text/x-dvi 也不存在,则接受text/plain。第二条以及第三条相关联的数值可以看成是优先级(preference level),不存在q = 1的值,q=0意味着不接受该类型。

有多种Accept首部,分别对应于前面描述的Content 首部。例如,浏览器可以发送以下任一项:
Accept-Encoding:
Accept-Charset:
Accept-Language:
它们分别用于指定编码、字符集和浏览器希望接受的语言。

HTTP使用类似于MIME 的首部运载元信息。浏览器和服务器都要发送首部,以允许它们对希望得到的文档的表示法和使用的编码进行协商。

7. 条件请求
HTTP允许发送方指定请求返回结果必须符合的条件。也就是说,当浏览器发送请求时,它包括的首部可以限
制在何种条件下才应该响应请求。如果不符合指定的条件,则服务器不返回请求的数据项。条件请求通过避免不必要的传送,从而允许浏览器优化取回过程。If-Modified-Since 请求指明了一个最简单的条件,它允许浏览器避免传输数据项,除非数据项自指定的日期后已经更新。例如,浏览器的GET请求可以包括首部:
If-Modified-Since: Fri, 01 Apr 2005 05:00:01 GMT
如果数据项比2005年1 月1 日还要早,则会避免传送。

8. 代理服务器和缓存
HTTP包括对代理服务器的显式支持。协议确切指出代理服务器如何处理每个请求,代理服务器应该如何解释首部,浏览器如何与代理服务器协商,代理服务器又如何与服务器协商。此外,已经设计了几个专门用于代理服务器的HTTP首部

有一个首部用于代理向某个服务器鉴别自己的身份,另一个首部用于处理过数据项的每个代理服务器都记录下自己的身份,因而最终的接收者就可以收到一份所有中介代理的列表。最后,HTTP允许服务器控制代理对每个万维网页面的处理。例如,服务器可以在响应中包括Max-Forwards 首部,以限制在交付给浏览器之前,处理数据项的代理服务器的数目。如果服务器指定代理的数目为1,如:Max-Forwards:1
那么从服务器到浏览器沿途中,最多只有一个代理可以处理数据项。数字为0时禁止任何代理处理数据项

缓存的目的是提高效率:通过消除不必要的传送,缓存减少了等待时间和网络通信量。
HTTP允许服务器以两种方式控制缓存。
1)首先,当服务器响应对万维网页面的请求时,可以指定缓存的细节,包括该页面能否被缓存,能否由代理缓存该页面,哪些人可以共享缓存的页面,缓存副本的到期时间,以及可应用于该副本的转换限制等。
2)其次,HTTP允许浏览器强制万维网页面重新确认(must-revalidate)。为此,浏览器发送对该页面的请求,使用首部指明其最大年龄(也就是自从存储万维网页面的副本以来的时间)不能大于0。

缓存是万维网高效操作的关键。HTTP允许服务器控制能否缓存页面、如何缓存页面以及页面的生存时间。浏览器可以绕过缓存,强制请求页面,从拥有该页面的服务器上得到新的副本。

9. HTTP的PUT和POST方法
实际上,HTTP 还提供了PUT和POST方法,以允许客户向服务器发送数据。这样才可能创建一段脚本,提示用户输入ID 和口令,然后把结果传送到服务器。出乎意料的是,虽然它允许任一方向的传送,但是底层的HTTP协议仍然是无状态的(即在交互期间不要求保持一条持久的运输层连接)。因此,通常需要用额外的信息来协调一系列的传送过程。例如,服务器在响应一个ID 和口令时,它可能会发送一个称为cookie的用于识别的整数,并在客户的后续传送中返回


阅读(1763) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~