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]. 

外部連結