(轉)Http 持久連接和非持久連接 Pipeline

大部分內容轉自 https://blog.csdn.net/susan0218/article/details/83293865

1.1 定義

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

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

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

      3. HTTP/1.0 使用非持久連接。HTTP/1.1 默認使用持久連接。
      4.Pipeline就是並行發起響應及並行處理響應 非Pipeline就是串行

 下面是具體步騾:

  1.HTTP客戶初始化一個與服務器主機www.yesky.com中的HTTP服務器的TCP連接。HTTP服務器使用默認端口號80監聽來自HTTP客戶的連接建立請求。

  2.HTTP客戶經由與TCP連接相關聯的本地套接字發出—個HTTP請求消息。這個消息中包含路徑名/somepath/index.html。

  3.HTTP服務器經由與TCP連接相關聯的本地套接字接收這個請求消息,再從服務器主機的內存或硬盤中取出對象/somepath/index.html,經由同一個套接字發出包含該對象的響應消息。

  4.HTTP服務器告知TCP關閉這個TCP連接(不過TCP要到客戶收到剛纔這個響應消息之後纔會真正終止這個連接)。

  5.HTTP客戶經由同一個套接字接收這個響應消息。TCP連接隨後終止。該消息標明所封裝的對象是一個HTML文件。客戶從中取出這個文件,加以分析後發現其中有10個JPEG對象的引用。

  6.給每一個引用到的JPEG對象重複步騾1-4。
上述步驟之所以稱爲使用非持久連接,原因是每次服務器發出一個對象後,相應的TCP連接就被關閉,也就是說每個連接都沒有持續到可用於傳送其他對象。每個TCP連接只用於傳輸一個請求消息和一個響應消息。就上述例子而言,用戶每請求一次那個web頁面,就產生11個TCP連接。

持久連接

 在持久連接情況下,服務器在發出響應後讓TCP連接繼續打開着。同一對客戶/服務器之間的後續請求和響應可以通過這個連接發送。整個Web頁面 (上例中爲包含一個基本HTMLL文件和10個圖像的頁面)自不用說可以通過單個持久TCP連接發送:甚至存放在同一個服務器中的多個web頁面也可以通過單個持久TCP連接發送。

通常,HTTP服務器在某個連接閒置一段特定時間後關閉它,而這段時間通常是可以配置的。

持久連接分爲不帶流水線 (without pipelining)和帶流水線(with pipelining)兩個版本。

如果是不帶流水線的版本,那麼客戶只在收到前一個請求的響應後才發出新的請求。這種情況下,web頁面所引用的每個對象 (上例中的10個圖像)都經歷1個RTT的延遲,用於請求和接收該對象。

與非持久連接2個RTT的延遲相比,不帶流水線的持久連接已有所改善,不過帶流水線的持久連接還能進一步降低響應延遲。不帶流水線版本的另一個缺點是,服務器送出一個對象後開始等待下一個請求,而這個新請求卻不能馬上到達。這段時間服務器資源便閒置了。

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

RTT(round trip time)

往返時延,表示從發送端發送數據開始,到發送端收到來自接收端的確認(接收端收到數據後便立即發送確認),總共經歷的時延。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章