溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?

發(fā)布時(shí)間:2021-06-22 14:03:36 來(lái)源:億速云 閱讀:418 作者:chen 欄目:安全技術(shù)

本篇內(nèi)容介紹了“HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

引言

本文分為以下三部分循序漸進(jìn)走進(jìn) HTTP/1.x 的 keep-alive 與 HTTP/2 多路復(fù)用:

  • HTTP/1.x keep-alive 是什么

  • HTTP/2 多路復(fù)用

  • HTTP/1.x keep-alive 與 HTTP/2 多路復(fù)用區(qū)別

下面正式開(kāi)始吧

HTTP/1.x keep-alive 是什么

在一文走進(jìn) TCP 與 HTTP 中,我們介紹過(guò),HTTP 協(xié)議是建立在 TCP 協(xié)議上的應(yīng)用層協(xié)議, HTTP  協(xié)議最初是一個(gè)非常簡(jiǎn)單的協(xié)議,通信方式也是采取簡(jiǎn)答的請(qǐng)求-應(yīng)答的模式,即:客戶端與服務(wù)器端的的每次請(qǐng)求都需要?jiǎng)?chuàng)建 TCP 連接,服務(wù)器響應(yīng)后斷開(kāi) TCP  連接,再請(qǐng)求再創(chuàng)建斷開(kāi)。

HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?

在 HTTP/0.9 與 早期 HTTP/1.0 中,默認(rèn)的就是這種,但這種頻繁的創(chuàng)建、斷開(kāi)連接無(wú)疑是極大的消耗性能

TCP連接的新建成本很高,因?yàn)榭蛻舳撕头?wù)器建立連接時(shí)需要“三次握手”,發(fā)送 3 個(gè)數(shù)據(jù)包,需要 1 個(gè) RTT;關(guān)閉連接是“四次揮手”,4 個(gè)數(shù)據(jù)包需要  2 個(gè) RTT,并且開(kāi)始時(shí)發(fā)送速率較慢(slow start),隨著網(wǎng)頁(yè)加載的外部資源越來(lái)越多,這個(gè)問(wèn)題就愈發(fā)突出了

所以 HTTP/1.0 引入了 keep-alive 長(zhǎng)連接,HTTP/1.0 中是默認(rèn)關(guān)閉的,可以通過(guò) Connection: keep-alive;  開(kāi)啟 ,HTTP/1.1 默認(rèn)是開(kāi)啟的,無(wú)論加沒(méi)加 Connection: keep-alive;

所謂長(zhǎng)連接,即在 HTTP 請(qǐng)求建立 TCP 連接時(shí),請(qǐng)求結(jié)束,TCP  連接不斷開(kāi),繼續(xù)保持一段時(shí)間(timeout),在這段時(shí)間內(nèi),同一客戶端向服務(wù)器發(fā)送請(qǐng)求都會(huì)復(fù)用該 TCP 連接,并重置 timeout 時(shí)間計(jì)數(shù)器,在接下來(lái)  timeout 時(shí)間內(nèi)還可以繼續(xù)復(fù)用 TCP 。這樣無(wú)疑省略了反復(fù)創(chuàng)建和銷毀 TCP 連接的損耗。

HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?

timeout 時(shí)間到了之后,TCP會(huì)立即斷開(kāi)連接嗎?

若兩小時(shí)(timeout)沒(méi)有收到客戶的數(shù)據(jù),服務(wù)器就發(fā)送一個(gè)探測(cè)報(bào)文段,以后則每隔 75 秒發(fā)送一次。若一連發(fā)送 10  個(gè)探測(cè)報(bào)文段后仍無(wú)客戶的響應(yīng),服務(wù)器就認(rèn)為客戶端出了故障,接著就關(guān)閉這個(gè)連接。

——摘自謝希仁《計(jì)算機(jī)網(wǎng)絡(luò)》

HTTP/2 多路復(fù)用

為什么 HTTP/2 引入多路復(fù)用?

這是因?yàn)椋?/p>

  • HTTP/1.x 雖然引入了 keep-alive 長(zhǎng)連接,但它每次請(qǐng)求必須等待上一次響應(yīng)之后才能發(fā)起,

  • 所以,在 HTTP/1.1  中提出了管道機(jī)制(默認(rèn)不開(kāi)啟),下一次的請(qǐng)求不需要等待上一個(gè)響應(yīng)來(lái)之后再發(fā)送,但這要求服務(wù)端必須按照請(qǐng)求發(fā)送的順序返回響應(yīng),當(dāng)順序請(qǐng)求多個(gè)文件時(shí),其中一個(gè)請(qǐng)求因?yàn)槟撤N原因被阻塞時(shí),在后面排隊(duì)的所有請(qǐng)求也一并被阻塞,這就是隊(duì)頭阻塞  (Head-Of-Line Blocking)

  • 人們采取了很多方法去解決,例如使用多個(gè)域名、引入雪碧圖、將小圖內(nèi)聯(lián)等,但都沒(méi)有從根本上解決問(wèn)題

HTTP/2 是怎么做的喃?

  • 首先它引入了 幀(frame)和流(stream),因?yàn)?HTTP/1.x  是基于文本的,因?yàn)槭俏谋?,就?dǎo)致了它必須是個(gè)整體,在傳輸是不可切割的,只能整體去傳

  • 既然,HTTP/2 是基于二進(jìn)制流的,它就可以把 HTTP 消息分解為獨(dú)立的幀,交錯(cuò)發(fā)送,然后在另一端通過(guò)幀中的標(biāo)識(shí)重新組裝,這就是多路復(fù)用

  • 這就實(shí)現(xiàn)了在同一個(gè)TCP連接中,同一時(shí)刻可以發(fā)送多個(gè)請(qǐng)求和響應(yīng),且不用按照順序一一對(duì)應(yīng),即使某個(gè)請(qǐng)求任務(wù)耗時(shí)嚴(yán)重,也不會(huì)影響到其它連接的正常執(zhí)行

HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?

HTTP/1.x keep-alive 與 HTTP/2 多路復(fù)用區(qū)別

總結(jié)一下,HTTP/1.x keep-alive 與 HTTP/2 多路復(fù)用區(qū)別:

  • HTTP/1.x 是基于文本的,只能整體去傳;HTTP/2 是基于二進(jìn)制流的,可以分解為獨(dú)立的幀,交錯(cuò)發(fā)送

  • HTTP/1.x keep-alive 必須按照請(qǐng)求發(fā)送的順序返回響應(yīng);HTTP/2 多路復(fù)用不按序響應(yīng)

  • HTTP/1.x keep-alive 為了解決隊(duì)頭阻塞,將同一個(gè)頁(yè)面的資源分散到不同域名下,開(kāi)啟了多個(gè) TCP 連接;HTTP/2  同域名下所有通信都在單個(gè)連接上完成

  • HTTP/1.x keep-alive 單個(gè) TCP 連接在同一時(shí)刻只能處理一個(gè)請(qǐng)求(兩個(gè)請(qǐng)求的生命周期不能重疊);HTTP/2 單個(gè) TCP  同一時(shí)刻可以發(fā)送多個(gè)請(qǐng)求和響應(yīng)

“HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI