HTTP 协议概要(一) 非持久连接

  • “非持久连接”的概念

某网页由最基本的 HTML 和10JPEG 图像构成,10JPEG 图像文件存放在同一台服务器中。设这个网页的URL为www.server.com/somepath/index.html。如果用户请求该网页并采用“非持久连接”,那么在HTTP 客户(通常是用户浏览器)和服务器之间将发生以下操作:

1.  HTTP 客户端初始化一个与服务器主机www.server.com中的HTTP服务器的TCP 连接。服务器使用默认端口80监听来自HTTP客户的建立连接请求。

2.  HTTP客户端经由与TCP关联的本地Socket发出一个HTTP请求消息(Request)。这个消息中包含路径名/somepaht/index.html

3.  HTTP服务器经由与TCP关联的本地Socket接收到这个请求消息,再从服务器主机的内存或者硬盘中取出文件/somepath/index.html,经由同一Socket向 HTTP客户端发送包含该文件的响应消息(Response Message)。

4.  HTTP服务器通知TCP服务层关闭这个TCP连接;TCP服务层并不立即关闭这个连接,而是在客户收到刚才那个响应消息后才会真正终止这个连接。

5.  HTTP客户端经由同一Socket接收这个响应消息(Response Message)。TCP连接随后终止。客户端所收到的消息中封装了客户端所请求的 HTML文件。客户端浏览器从中取出这个文件,加以分析后发现这个文件中还有有10JPEG对象引用。

6.  对每个引用到的JPEG对象重复步骤14


 

上述步骤之所以称为使用非持久连接,原因是每次服务器发送一个对象后相关的TCP连接就被关闭,也就是说每个连接没有持续到可以传输其他对象。每个TCP连接只能传送一个请求消息和响应消息。就上述例子,用户请求的那个Web页面就产生了11TCP连接(1个网页请求连接和10个图象请求连接)。

 

在上述的例子中,并没有明确指出客户是依次打开10 逐一取得每个JPEG 对象,还是同时打开多个 TCP连接同时取得多个 JPEG对象。实际上,现今的浏览器允许用户通过配置来控制并行连接的程度。大多数浏览器默认可以打开510个并行TCP连接,每个连接处理一个请求/响应事务。如果把并行连接数设置为1,那样的话这个传送JPEG10个连接是串行建立的。使用并行连接可以缩短响应时间。


从客户请求基本HTML文件到它收到这个文件所经历的时间为往返时间(Round Trip Time - RTT)。它是一个小分组从客户端游动到服务器在返回客户端所花费的时间。RTT包括分组传播延迟、在中间路由器和交换机上的分组排队延迟以及分组处理延迟。下面考虑用户点击某个超链接时会发生什么。用户的点击导致浏览器发起建立一个与Web服务器的TCP连接;这里涉及“三次握手”过程。首先是客户向服务器发送一个小的冗余消息,接着是服务器向客户确认并以一个小的TCP消息作为响应,最后是客户向服务器回送确认。“三次握手”过程的前两次握手结束时流逝的时间为1个RTT。此时客户把HTTP请求消息发送到TCP连接中,接着,客户将第三次握手过程最后一次的确认消息捎带在这个请求数据分组中发送出去。服务器收到来自TCP的请求消息后,把相应的HTML文件发送到TCP连接中,服务器接着把对早先收到的客户请求消息中的确认捎带数据包含在该HTML文件的数据分组中发送出去。这轮HTTP请求/响应也花费了1个RTT时间。因此,总的响应时间粗略的算是2个RTT加上服务器发送这个HTML文件的时间。
 

posted @ 2007-05-28 22:06  protorock  阅读(2499)  评论(0编辑  收藏  举报