持久连接情况下,服务器在发出相应后让TCP连接继续打开着。同一客户./服务器之间的后续请求和相应可以通过这个连接发送。
HTTP服务器在某个连接限制一段闲置后会关闭它,而这个时间是可以配置的。
持久连接分为:不带流水线(without pipelining)和带流水线(with pipelining)
不带流水线:客户只在收到前一个请求的相应后才发出新的请求。那么WEB页面所引用的每个对象都要经历一个RTT的延迟,用于请求和接收该对象。(与非持久连接的2个RTT的延迟相比,不带流水线的持久连接已经有所改善。)
缺点:服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。
带流水线:HTTP/1.1默认的是带流水线的持久连接。HTTP客户每碰到一个引用就立即发出一个请求,服务器收到这些请求后,也可以一个接着一个紧挨着发出各个对象。如果所有的请求和相应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟。(不带流水线的,是每个引用到的对象都各有1个RTT的延迟)。
流水线的持久连接中,服务器空等的时间就比较少。
与非持久相比,持久连接除了降低1个RTT的相应延迟外,缓启动延迟也比较小。原因:既然各个对象使用同一个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个个对象。