在很多应用中,服务器端和客户端长时间通信,其中客户发出一系列请求并且服务器对每个请求进行相应。
那么每个请求/相应对是经一个单独的TCP连接发送,还是所有的请求/相应都用相同TCP连接发送呢?
前一种方法,称为非持续连接;后一种方法,称为持续连接。
HTTP既能够 使用非持续连接,也能够 使用持续连接。尽管HTTP在其默认的方式下使用持续连接,HTTP客户和服务器也能配置
成使用非持续连接。下面简单的讨论一下这两种连接:
1.采用非持续连接的HTTP
HTTP客户接收响应报文后,TCP连接关闭。每个TCP连接只传输一个请求报文和一个响应报文,这样产生的TCP连接就会很多。
实际上,浏览器可以打开5~10个并行的TCP连接,而每条连接处理一个请求响应事务,很明显,这样能够节省时间。
往返时间RTT:指的是一个短分组从客户到服务器然后再返回客户所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。粗略来说,请求并接收一个HTML文件所需的时间就是两个RTT加上服务器传输HTML文件的时间,如下图。
2.采用持续连接的HTTP
很明显第1种方法,客户和服务器都要分配TCP的缓冲区和保持TCP变量,web服务器的负担会大;而且每个对象会遭受两倍的RTT的交付时延,即一个RTT用于创建TCP,另一个RTT用于请求和接收一个对象。
采用持续连接时,服务器发送响应后保持该TCP连接打开。在相同的客户与服务器之间的后续请求和响应报文能够通过相同的TCP连接进行传送。那么,如果一条连接经过一定的时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。HTTP的默认模式是使用带流水线的持续连接。