HTTP 持久連線

admin發表於2019-05-08

在介紹持久連線之前,先簡單介紹一下瀏覽器與HTTP伺服器建立TCP連線的簡單過程(三次握手):

(1).客戶端向伺服器傳送一個小的冗餘訊息。

(2).伺服器向客戶端確認並響應以一個小的冗餘訊息。

(3).最後是客戶端向伺服器回確認。

往返時間(Round Trip Time,簡稱RTT)是分組從客戶主機遊動到伺服器主機再返回客戶主機所花的時間。

RTT包括分組傳播延遲、在中間路由器和交換機上的分組排隊延遲以及分組處理延遲。

前兩次握手結束所花費的時間是一個RTT,此時客戶端將HTTP請求資訊傳送到TCP連線中,客戶端同時將第三次握手確認捎帶在包含這個資訊的資料分節中傳送出去。最後,伺服器接收到請求資訊之後,會將響應內容傳送到TCP連線中,伺服器同時將早前收到的客戶請求的確認捎帶在包含該響應的資料分節中傳送出去。

圖示如下:

aid[3259]

完成這麼一個互動,總體所花費的時間大約為2個RTT加上響應資料傳輸時間。

非持久連線和持久連線:

客戶端發出請求,伺服器端對每個請求進行響應。

對於這些請求|響應,如果每次都經過一個單獨的TCP連線,稱為非持久連線。反之,如果每次都經過相同的TCP連線進行傳送,稱為持久連線,也就是多個請求和響應可以利用同一個TCP連線,而不是每一次請求響應都要新建一個TCP連線。考慮到每次TCP(每開始一個TCP連線都是慢啟動)連線的高消耗,永續性連線好處不言而喻。

HTTP1.1協議預設開啟持久連結,截圖如下:

aid[3260]

當然持久連線不會無限期的保持,通常,HTTP伺服器在某個連線閒置一段特定時間後關閉它,而這段時間通常是可以配置的。下面是永續性連線和非持久連線對比圖示:

aid[3261]

上面圖示很好地展示了兩者的區別,效能的差別也就得以體現。

相關文章