本頁使用了標題或全文手工轉換

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秒),這與提高的性能相比也許會影響性能。[7]

對於單個文件被不斷請求的服務(例如圖片存放網站),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"
  2. ^ Apache HTTP Server - KeepAlive Directive 網際網路檔案館存檔,存檔日期2012-01-21.
  3. ^ Apache HTTP Server 2.0 - KeepAliveTimeout Directive
  4. ^ Apache HTTP Server 2.2 - KeepAliveTimeout Directive
  5. ^ Multiple (wiki). Httpd/KeepAlive. Docforge. [2010-01-30]. (原始內容存檔於2010-01-06). 
  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]. 

外部連結[編輯]