http長(zhǎng)鏈接和短鏈接

HTTP的長(zhǎng)鏈接和短鏈接實(shí)際上是TCP的長(zhǎng)連接和短鏈接。首先我們先介紹一下TCP/IP協(xié)議組四層模型。其中包括以下:

  1. 應(yīng)用層:HTTP、FTP、DNS、TELNET等協(xié)議
  2. 傳輸層:TCP、UDP
  3. 網(wǎng)絡(luò)層:IP、ARP、RARP、ICMP協(xié)議等
  4. 網(wǎng)絡(luò)接口層:是TCP/IP協(xié)議的基層,負(fù)責(zé)數(shù)據(jù)幀的發(fā)送和接收。

接下來我們說下常見的幾個(gè)協(xié)議的作用:

  • HTTP:HTTP協(xié)議無狀態(tài)指的是對(duì)事物處理沒有記憶能力。也就是說打開一個(gè)服務(wù)器的網(wǎng)頁和上次打開這個(gè)網(wǎng)頁之間沒有任何聯(lián)系。

  • IP協(xié)議:負(fù)責(zé)解決網(wǎng)路路由和尋址問題

  • TCP:解決如何在IP層之上可靠的傳遞數(shù)據(jù)包。并且順序和發(fā)送順序一致,不丟包。TCP協(xié)議是可靠的、面相連接的。

  • UDP:與TCP是對(duì)應(yīng),是面相非連接的協(xié)議,只負(fù)責(zé)把數(shù)據(jù)包傳過去。數(shù)據(jù)量小、可靠性不高,可能會(huì)掉包。我們經(jīng)常使用的ping命令就是發(fā)送UDP數(shù)據(jù)包。

好了好了,進(jìn)入正題,開始說長(zhǎng)鏈接和短鏈接。

短連接

在HTTP/1.0中默認(rèn)是使用短連接,客戶端每進(jìn)行一次http請(qǐng)求就建立一次連接,任務(wù)結(jié)束連接就中斷(雙方都可以發(fā)起close,一般是客戶端發(fā)起),比如訪問一個(gè)網(wǎng)頁或者其他web資源(img、css、js等),每遇到一個(gè)web資源就要建立一次連接。

優(yōu)缺點(diǎn):

因?yàn)槊看瓮ㄐ哦夹枰CP連接,連接的建立都需要三次握手,而釋放需要四次握手。所以會(huì)浪費(fèi)時(shí)間和帶寬。但是優(yōu)點(diǎn)就是對(duì)于服務(wù)端來講,不要進(jìn)行額外的控制,每條連接都是有用的。

長(zhǎng)連接

從HTTP/1.1開始默認(rèn)使用長(zhǎng)連接。使用長(zhǎng)連接的HTTP協(xié)議會(huì)在響應(yīng)頭加入Connection: keep-alive。當(dāng)打開一個(gè)網(wǎng)頁客戶端和服務(wù)端建立的TCP連接不會(huì)關(guān)閉。當(dāng)再次訪問服務(wù)器時(shí)還會(huì)使用這個(gè)連接。但是這個(gè)狀態(tài)不會(huì)永久保持連接,可以在不同的服務(wù)器軟件(Apache)上設(shè)置。

優(yōu)缺點(diǎn):

減少了TCP的建立和關(guān)閉,減少浪費(fèi)、節(jié)約時(shí)間。對(duì)于頻繁請(qǐng)求適合使用長(zhǎng)連接,但是缺點(diǎn)就是隨著用戶的增多,服務(wù)器會(huì)扛不住的。所以需要采取一些策略:如關(guān)閉長(zhǎng)時(shí)間沒有讀寫操作的連接。

應(yīng)用

web網(wǎng)站的http服務(wù)一般都是短連接。

?;罟δ軘U(kuò)展:

如果客戶端已經(jīng)消失但是連接沒有斷開,服務(wù)器會(huì)保留一個(gè)半開放的連接,而服務(wù)器又在等待客戶端的數(shù)據(jù),此時(shí)服務(wù)端將會(huì)永遠(yuǎn)等待。?;罟δ軙?huì)試圖檢測(cè)半開放狀態(tài)。如果一個(gè)連接2個(gè)小時(shí)沒有任何動(dòng)作,服務(wù)端會(huì)發(fā)送一個(gè)試探報(bào)文,根據(jù)客戶端響應(yīng)的4個(gè)客戶端狀態(tài)進(jìn)行判斷。

  1. 客戶端機(jī)正常運(yùn)行,且服務(wù)器可達(dá),此時(shí)TCP響應(yīng)正常,服務(wù)器將保活定時(shí)器復(fù)位。

  2. 客戶機(jī)已經(jīng)奔潰,并且關(guān)閉或者重新啟動(dòng)。服務(wù)端無法收到響應(yīng)。服務(wù)端每隔75秒發(fā)一次,一共發(fā)10次,若沒有收到一個(gè)響應(yīng),則認(rèn)為客戶端已經(jīng)關(guān)閉并且終止連接。

  3. 客戶端奔潰并已經(jīng)重新啟動(dòng),服務(wù)端將收到一個(gè)對(duì)其?;钐綔y(cè)的響應(yīng),這個(gè)響應(yīng)是一個(gè)復(fù)位,使得服務(wù)器終止這個(gè)連接。

  4. 客戶機(jī)正常運(yùn)行,但是服務(wù)器不可達(dá)。這種情況與第二種類似。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容