Connection:Keep-alive詳解


先看幾個名詞解釋:

http無狀態協議:

無狀態協議是指http協議本身對於事務處理沒有記憶功能,服務器不知道瀏覽器的狀態。通俗的即使你登錄了,去訪問同一個網站的不同網頁,服務器都不會知道你是誰,如果需要記錄登錄用戶的信息,用戶操作,用戶行為等數據需要使用cookie或session來存儲。

優點:服務器不用為每個客戶端連接分配內存來記憶大量狀態,也不用在客戶端失去連接時去清理內存,以更高效地去處理WEB業務
缺點:客戶端的每次請求都需要攜帶相應參數,服務器需要處理這些參數

keep-alive:

從HTTP/1.1起,瀏覽器默認都開啟了Keep-Alive,保持長連接特性,客戶端和服務器都能選擇隨時關閉連接。簡單說,當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的TCP連接。但是Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。

誤解:無狀態不代表HTTP不能保持TCP連接,更不能代表HTTP使用的是UDP協議(無連接)。即使http在無狀態下,只要客戶端和服務器的頭部信息connection:keep-alive,則在有效期內他們使用同一條TCP連接。

舉例說明:

一次請求了5個接口,如果開啟HTTP持久連接,則此 5個請求走同一條 TCP 連接,走同一條 HTTP 流。5 秒之內的所有請求都復用此 TCP 連接。當 5秒鍾之內沒有其他請求后,此連接斷開。(一條長連接)

如果不是HTTP持久連接,則此 5個請求需要發起 5條 TCP 連接(包括三次握手等),HTTP 請求后立刻斷開,TCP 連接根據 操作系統 的釋放規則進行釋放。(5條短連接)

優點:TCP 連接數比較少,所以隨之而來和 TCP 相關的優點全都來了。其實和 HTTP 沒什么關系,主要是大幅降低服務器端因大量新建 TCP 連接造成的 CPU負載,以及 TCP 傳輸相關的擁塞控制問題。

缺點:這個協議是為 HTTP1.1 而存在的,已經不完全適合現有的網絡狀況。以前帶寬小,瞬時請求高,所以用這個方法降低 TCP 新建。但現在帶寬大,並發高。如果 HTTP 服務存在長輪訓或較長間隔請求,而且超過 Keep-Alive 的設置(比如 Keep-Alive 5 秒,但輪訓周期是 6 秒),則可能會造成大量的無用途連接,白白占用系統資源。

所以具體是否設置 Connection: Keep-Alive ,以及后續 Keep-Alive 的參數設置,需要根據你網站業務來合理規划。

PS: HTTP 2 沒有這玩意,用的是更先進的直接基於TCP層次的連接管理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM