HTTP持久连接
HTTP持久连接(英語:,也称作或)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。
HTTP/HTTPS |
---|
版本 |
请求方法 |
报文主体 |
頭欄位 |
狀態碼 |
相关主题 |
操作
在 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]
优势
根据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]
参考文献
- . [2012-01-19]. (原始内容存档于2011-03-07).
- . [2012-01-19]. (原始内容存档于2012-01-21).
- . [2012-01-19]. (原始内容存档于2013-05-03).
- . [2012-01-19]. (原始内容存档于2014-05-22).
- Multiple (wiki). . Docforge. [2010-01-30]. (原始内容存档于2010-01-06).
- Zhe Wang and Pei Cao. . University of Wisconsin-Madison. 1998-12-09 [2009-07-08]. (原始内容存档于2007-04-04).
- . stevesouders.com. 2008-03-10 [2009-07-17]. (原始内容存档于2009-08-10).
- . Microsoft. 2007-10-27 [2009-07-17]. (原始内容存档于2009-07-22).
- . mozillazine.org. [2009-07-17]. (原始内容存档于2009-06-08).
- . Opera Software. 2000-03-28 [2009-07-08]. (原始内容存档于2010-09-10).