- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- HTTP/1.x 的 keep-alive與 HTTP/2 多路復用的區別是什么
本篇內容介紹了“HTTP/1.x 的 keep-alive與 HTTP/2 多路復用的區別是什么?”的有關(guān)知識,在實(shí)際案例的操作過(guò)程中,不少人都會(huì )遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學(xué)有所成!
本文分為以下三部分循序漸進(jìn)走進(jìn) HTTP/1.x 的 keep-alive 與 HTTP/2 多路復用:
HTTP/1.x keep-alive 是什么
HTTP/2 多路復用
HTTP/1.x keep-alive 與 HTTP/2 多路復用區別
下面正式開(kāi)始吧
在一文走進(jìn) TCP 與 HTTP 中,我們介紹過(guò),HTTP 協(xié)議是建立在 TCP 協(xié)議上的應用層協(xié)議, HTTP 協(xié)議最初是一個(gè)非常簡(jiǎn)單的協(xié)議,通信方式也是采取簡(jiǎn)答的請求-應答的模式,即:客戶(hù)端與端的的每次請求都需要創(chuàng )建 TCP 連接,服務(wù)器響應后斷開(kāi) TCP 連接,再請求再創(chuàng )建斷開(kāi)。
在 HTTP/0.9 與 早期 HTTP/1.0 中,默認的就是這種,但這種頻繁的創(chuàng )建、斷開(kāi)連接無(wú)疑是極大的消耗性能
TCP連接的新建成本很高,因為客戶(hù)端和服務(wù)器建立連接時(shí)需要“三次握手”,發(fā)送 3 個(gè)數據包,需要 1 個(gè) RTT;關(guān)閉連接是“四次揮手”,4 個(gè)數據包需要 2 個(gè) RTT,并且開(kāi)始時(shí)發(fā)送速率較慢(slow start),隨著(zhù)網(wǎng)頁(yè)加載的外部資源越來(lái)越多,這個(gè)問(wèn)題就愈發(fā)突出了
所以 HTTP/1.0 引入了 keep-alive 長(cháng)連接,HTTP/1.0 中是默認關(guān)閉的,可以通過(guò) Connection: keep-alive; 開(kāi)啟 ,HTTP/1.1 默認是開(kāi)啟的,無(wú)論加沒(méi)加 Connection: keep-alive;
所謂長(cháng)連接,即在 HTTP 請求建立 TCP 連接時(shí),請求結束,TCP 連接不斷開(kāi),繼續保持一段時(shí)間(timeout),在這段時(shí)間內,同一客戶(hù)端向服務(wù)器發(fā)送請求都會(huì )復用該 TCP 連接,并重置 timeout 時(shí)間計數器,在接下來(lái) timeout 時(shí)間內還可以繼續復用 TCP 。這樣無(wú)疑省略了反復創(chuàng )建和銷(xiāo)毀 TCP 連接的損耗。
timeout 時(shí)間到了之后,TCP會(huì )立即斷開(kāi)連接嗎?
若兩小時(shí)(timeout)沒(méi)有收到客戶(hù)的數據,服務(wù)器就發(fā)送一個(gè)探測報文段,以后則每隔 75 秒發(fā)送一次。若一連發(fā)送 10 個(gè)探測報文段后仍無(wú)客戶(hù)的響應,服務(wù)器就認為客戶(hù)端出了故障,接著(zhù)就關(guān)閉這個(gè)連接。
——摘自謝希仁《計算機網(wǎng)絡(luò )》
為什么 HTTP/2 引入多路復用?
這是因為:
HTTP/1.x 雖然引入了 keep-alive 長(cháng)連接,但它每次請求必須等待上一次響應之后才能發(fā)起,
所以,在 HTTP/1.1 中提出了管道機制(默認不開(kāi)啟),下一次的請求不需要等待上一個(gè)響應來(lái)之后再發(fā)送,但這要求服務(wù)端必須按照請求發(fā)送的順序返回響應,當順序請求多個(gè)文件時(shí),其中一個(gè)請求因為某種原因被阻塞時(shí),在后面排隊的所有請求也一并被阻塞,這就是隊頭阻塞 (Head-Of-Line Blocking)
人們采取了很多方法去解決,例如使用多個(gè)域名、引入雪碧圖、將小圖內聯(lián)等,但都沒(méi)有從根本上解決問(wèn)題
HTTP/2 是怎么做的喃?
首先它引入了 幀(frame)和流(stream),因為 HTTP/1.x 是基于文本的,因為是文本,就導致了它必須是個(gè)整體,在傳輸是不可切割的,只能整體去傳
既然,HTTP/2 是基于二進(jìn)制流的,它就可以把 HTTP 消息分解為獨立的幀,交錯發(fā)送,然后在另一端通過(guò)幀中的標識重新組裝,這就是多路復用
這就實(shí)現了在同一個(gè)TCP連接中,同一時(shí)刻可以發(fā)送多個(gè)請求和響應,且不用按照順序一一對應,即使某個(gè)請求任務(wù)耗時(shí)嚴重,也不會(huì )影響到其它連接的正常執行
HTTP/1.x keep-alive 與 HTTP/2 多路復用區別
總結一下,HTTP/1.x keep-alive 與 HTTP/2 多路復用區別:
HTTP/1.x 是基于文本的,只能整體去傳;HTTP/2 是基于二進(jìn)制流的,可以分解為獨立的幀,交錯發(fā)送
HTTP/1.x keep-alive 必須按照請求發(fā)送的順序返回響應;HTTP/2 多路復用不按序響應
HTTP/1.x keep-alive 為了解決隊頭阻塞,將同一個(gè)頁(yè)面的資源分散到不同域名下,開(kāi)啟了多個(gè) TCP 連接;HTTP/2 同域名下所有通信都在單個(gè)連接上完成
HTTP/1.x keep-alive 單個(gè) TCP 連接在同一時(shí)刻只能處理一個(gè)請求(兩個(gè)請求的生命周期不能重疊);HTTP/2 單個(gè) TCP 同一時(shí)刻可以發(fā)送多個(gè)請求和響應
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站