1. 程式人生 > >HTTP協議:pipeline、持久連線、非持久連線

HTTP協議:pipeline、持久連線、非持久連線

一、HTTP持久連線、非持久連線

1.1 定義

      1. 非持久連線:每個連線處理一個請求-響應事務。

      2. 持久連線:每個連線可以處理多個請求-響應事務。

            持久連線情況下,伺服器發出響應後讓TCP連線繼續開啟著。同一對客戶/伺服器之間的後續請求和響應可以通過這個連線傳送。

3. HTTP/1.0 使用非持久連線。     HTTP/1.1 預設使用持久連線。

1.2 非持久連線示例

      非持久連線下,客戶端請求一個頁面。假設該頁面包含1個HTML檔案和10個JPEG影象,所有這些物件在同一臺伺服器主機中。再假設該節本HTML檔案的URL為:www.yesky.com/sompath/index.html。

      1. HTTP客戶端與伺服器主機www.yesky.com中的HTTP伺服器建立一個TCP連線。

      2. HTTP客戶端傳送HTTP請求訊息。 包含/sompath/index.html。

      3. HTTP伺服器接收請求訊息,從伺服器主機記憶體或硬碟拿去除物件/sompath/index.html,發出該物件的響應訊息。

      4. HTTP伺服器告知TCP關閉這個TCP連線(TCP要等客戶收到這個響應訊息後,才會真正終止這個連線)。

      5. HTTP客戶接收響應訊息。TCP連線終止。 該訊息標明所拆裝的物件是一個HTML檔案。客戶取出檔案,分析後發現10個JPEG物件的引用。

      6.  給每一個引用到的JPEG物件重複步驟1~4。

二、非持久連線、序列TCP連線、並行TCP連線、響應時間

2.1 序列TCP連線、並行TCP連線

      10個JPEG物件,可以通過10個序列的TCP連線先後取到,也可以通過並行的TCP連線同時取到其中的某些物件。

      使用並行TCP連線,可以縮短響應時間。

2.2 響應時間

      客戶端請求1個基本HTML檔案,要耗時2個RTT(round trip time)。

      1. “三次握手”時,客戶向伺服器傳送連線請求,伺服器傳送確認。

      2. “三次握手”時,客戶向伺服器傳送確認,並攜帶請求訊息,伺服器傳送響應訊息。

2.3 非持久連線的缺點

      1. 每個連線,TCP得在客戶端和服務端分配TCP緩衝區,並維持TCP變數。 對於同時為來自數百個不同客戶的請求提供服務的web伺服器來說,這會嚴重增加其負擔。

      2. 每個物件都有2個RTT的延遲。

      3. 每個物件都遭受TCP緩啟動,因為每個TCP連線都起始於緩啟動階段。

三、持久連線、不帶流水線(without pipelining)、帶流水線(with pipelining)

3.1 不帶流水線(without pipelining)、帶流水線(with pipelining)

      1.  不帶流水線(with pipelining):客戶只在收到前一個請求的響應後,才發出新的請求。

           與非持久連線2個RTT的延遲相比,不帶流水線的持久連線已有所改善。

      2.  帶流水線(with pipelining):HTTP客戶沒碰到一個引用就立即傳送一個請求,即HTTP客戶可以一個接一個挨著傳送各個引用物件的請求。伺服器收到這些請求後,也可以一個接一個的傳送各個物件的響應。

           帶流水線,所有引用到的物件一共只經歷1個RTT的延時,而不帶流水線,每個引用到的物件各有1個RTT的延遲。

           帶流水線的持久連線中伺服器空等請求的時間較少。

參考資料: