掃盲系列之http長連線短連線

2021-08-08 13:13:03 字數 1640 閱讀 6681

作為一名web開發者,如果對http協議不熟悉那肯定是說不過去的,至少不能稱為一名合格的web開發。http協議是屬於應用層協議,除了http協議,我們還經常遇到tcp/udp協議,他們是屬於傳輸層協議,ip協議是屬於網路層協議。這裡的關注點不是這些協議的區別,我們主要來學習一下http協議中的長連線短連線。http的長連線和短連線本質上是tcp協議的長連線和短連線,由於udp不是基於連線的協議,所以udp是沒有長連線短連線之說的。接下來就和大家一起學習一下http長連線短連線的區別。

上面講到http的長連線短連線本質上是tcp的長連線和短連線。那麼tcp的長連線短連線究竟有什麼區別,首先我們需要搞清楚什麼是tcp的三次握手四次揮手。在日常瀏覽器訪問伺服器的時候,傳遞資料過去,一般如果是基於http協議,都是先通過tcp建立連線,在這個連線中傳遞資料報,在資料報傳遞完之後,再釋放tcp連線。所以在一次請求從開始到結束,需要tcp建立連線釋放連線。而在連線建立的過程之中客戶端和伺服器之間需要三次握手,來確定連線的建立。具體的握手過程可以見下圖

在上面的三次握手之後,客戶端和服務端的連線算是建立成功了,於是客戶端可以向服務端傳送資料報。在資料報傳遞完之後,如果需要釋放剛剛建立的鏈結。那麼客戶端和服務端就需要進行四次揮手,具體揮手流程見下圖

四次揮手結束之後,握手建立的連線就相當於釋放了。從上面的握手,揮手可以看出連線的建立和釋放是比較耗費資源的。

上面通過握手和揮手說明了,連線的建立和釋放都是比較耗費資源,而所謂的長連線就是指在一次請求的資料報傳遞完之後,並不是馬上釋放連線。而是通過乙個心跳測試來維持連線,當下一次有請求進來的時候,共用這個連線來傳遞資料報,直到一定時間之後才**這個連線。這樣就可以避免由於頻繁建立連線,釋放連線導致的資源消耗和請求延遲。這樣確實提公升了請求的處理速度,但是由於在服務端需要維持連線的存在,如果需要的連線數比較小,而且在連線中需要頻繁操作,這種長連線比較實用。如果建立了太多的長連線,在伺服器端需要維持這些連線,這樣伺服器端的壓力就比較大了。而和長連線對應的短連線是在資料報傳遞完之後就立刻釋放連線。所以短連線不需要額外的資源來維持和管理短連線。但是短連線自身的缺點剛剛在上面也已經講過了。所以對於長連線短連線的使用場景也是需要合理選擇的。一般資料庫連線是屬於長連線,而在早期的瀏覽器訪問預設是短連線,但是在http1.1中預設是長連線。一般長連線在請求的響應頭上都有這個屬性connection keep-alive,那麼在長連線中是怎麼確定資料報已經傳遞完畢的呢,其實這就要通過設定content-length來確定請求報文的長度了。

短連線的操作流程是:

建立連線——資料傳輸——釋放連線。。。。。建立連線——資料傳輸——釋放連線

就這樣來來回回的建立和關閉

長連線的操作流程是:

建立連線——資料傳輸。。。。(通過服務端的心跳測試來保持連線)。。。資料傳輸——釋放連線

上面需要注意的一點就是,長連線不是說永遠不會釋放連線。那麼隨著長連線的增多,服務端的壓力遲早會壓垮伺服器。他是通過服務端的保活功能,來維持長連線。如果發現客戶端不是出於啟用狀態就釋放長連線,避免資源的浪費。

上面是對長連線短連線的一點小介紹,至於他們的使用需要具體情況具體對待!

http 長連線 短連線

http短連線 非持久連線 是指,客戶端和服務端進行一次http請求 響應之後,就關閉連線。所以,下一次的http請求 響應操作就需要重新建立連線。http長連線 持久連線 是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求 響應操作。持久連線可以設定過期時間,也可以不設定。http...

Http 長連線 短連線 長輪詢 短輪詢

短連線 每次http請求都會建立tcp連線,管理容易 長連線 只需要建立一次tcp連線,以後http請求重複使用同乙個tcp連線,管理難 http1.1規定了預設保持長連線 http persistent connection 也有翻譯為持久連線 資料傳輸完成了保持tcp連線不斷開 不發rst包 不...

HTTP 長連線 短連線 長輪詢 短輪詢

http 1.0需要使用keep alive引數來告知伺服器端要建立乙個長連線,而http1.1預設支援長連線,http的長連線很容易在空閒後自動斷開,一般來說這個時間是300s左右。http是基於tcp ip協議的,建立乙個tcp連線是需要經過三次握手的,有一定的開銷,如果每次通訊都要重新建立連線...