HTTP持久连接

本页使用了标题或全文手工转换,现处于中国大陆简体模式
求闻百科,共笔求闻

HTTP持久连接(英语:HTTP persistent connection,也称作HTTP keep-aliveHTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。

操作

在HTTP 1.0中,没有官方的keepalive操作。通常是在现有协议上添加一个指数。如果浏览器支持keep-alive,它会在请求的包头中添加:

Connection: Keep-Alive

然后当服务器收到请求,作出回应的时候,它也添加一个头在响应中:

Connection: Keep-Alive

这样做,连接就不会中断,而是保持连接。当客户端发送另一个请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。

在HTTP 1.1中所有的连接默认都是持续连接,除非特殊声明不支持。[1]HTTP持久连接不使用独立的keepalive信息,而是仅仅允许多个请求使用单个连接。然而,Apache 2.0 httpd的默认连接过期时间[2]仅有15秒[3],Apache 2.2仅有5秒。[4]短的过期时间的优点是能够快速的传输多个web页组件,而不会绑定多个服务器进程或线程太长时间。[5]

优势

  • 较少的CPU和内存的使用(由于同时打开的连接的减少了)
  • 允许请求和应答的HTTP流水线
  • 降低拥塞控制TCP连接减少了)
  • 减少了后续请求的延迟(无需再进行握手
  • 报告错误无需关闭TCP连接

根据RFC 2616 (47页),用户客户端与任何服务器和代理服务器之间不应该维持超过2个链接。代理服务器应该最多使用2×N个持久连接到其他服务器或代理服务器,其中N是同时活跃的用户数。这个指引旨在提高HTTP响应时间并避免阻塞。

劣势

对于现在的广泛普及的宽带连接来说,Keep-Alive也许并不像以前一样有用。web服务器会保持连接若干秒(Apache中默认15秒),这与提高的性能相比也许会影响性能。

对于单个文件被不断请求的服务(例如图片存放网站),Keep-Alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。

Web浏览器中的使用

使用多个连接和使用持久链接的对比

网景导航者(4.05版本以后)和Internet Explorer(4.01版本以后)支持使用持久链接链接Web服务器和代理服务器。

网景不使用过时时间来关闭持久连接。而是对所有空闲的持久链接进行排队。当需要打开一个新的持久链接,但连接到不同的服务器上时,浏览器使用最近最少使用算法终止一个空闲的持久链接。[6]

Internet Explorer支持持久链接,IE 6和IE 7缺省使用2个持久链接,而IE 8缺省使用6个持久链接。[7]持久链接在不活跃60秒后过时,可以在Windows注册表中修改。[8]

Mozilla Firefox支持持久链接。可以定制同时的持久连接的最大个数(每个服务器,每个代理服务器,总数)。连接在不活跃300秒(5分钟)后过时(配置中可以修改)。[9]

Opera 4.0版本开始支持持久链接.[10]可以配置同时的持久连接的最大个数(每个服务器,总数)。

参考文献

  1. Persistent HTTP Connections in RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1". [2012-01-19]. 
  2. Apache HTTP Server - KeepAlive Directive. [2012-01-19]. 
  3. Apache HTTP Server 2.0 - KeepAliveTimeout Directive. [2012-01-19]. 
  4. Apache HTTP Server 2.2 - KeepAliveTimeout Directive. [2012-01-19]. 
  5. Multiple (wiki). Httpd/KeepAlive. Docforge. [2010-01-30]. 
  6. Zhe Wang and Pei Cao. Persistent Connection Behavior of Popular Browsers. University of Wisconsin-Madison. 1998-12-09 [2009-07-08]. 
  7. IE8 speeds things up. stevesouders.com. 2008-03-10 [2009-07-17]. 
  8. How to change the default keep-alive time-out value in Internet Explorer. Microsoft. 2007-10-27 [2009-07-17]. 
  9. Network.http.keep-alive.timeout. mozillazine.org. [2009-07-17]. 
  10. Opera 4.0 Upgrades File Exchange: Includes HTTP 1.1. Opera Software. 2000-03-28 [2009-07-08]. 

外部链接