本篇內(nèi)容介紹了“HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
為鳳陽等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及鳳陽網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、鳳陽網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
本文分為以下三部分循序漸進走進 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ū)別
下面正式開始吧
在一文走進 TCP 與 HTTP 中,我們介紹過,HTTP 協(xié)議是建立在 TCP 協(xié)議上的應(yīng)用層協(xié)議, HTTP 協(xié)議最初是一個非常簡單的協(xié)議,通信方式也是采取簡答的請求-應(yīng)答的模式,即:客戶端與服務(wù)器端的的每次請求都需要創(chuàng)建 TCP 連接,服務(wù)器響應(yīng)后斷開 TCP 連接,再請求再創(chuàng)建斷開。
在 HTTP/0.9 與 早期 HTTP/1.0 中,默認的就是這種,但這種頻繁的創(chuàng)建、斷開連接無疑是極大的消耗性能
TCP連接的新建成本很高,因為客戶端和服務(wù)器建立連接時需要“三次握手”,發(fā)送 3 個數(shù)據(jù)包,需要 1 個 RTT;關(guān)閉連接是“四次揮手”,4 個數(shù)據(jù)包需要 2 個 RTT,并且開始時發(fā)送速率較慢(slow start),隨著網(wǎng)頁加載的外部資源越來越多,這個問題就愈發(fā)突出了
所以 HTTP/1.0 引入了 keep-alive 長連接,HTTP/1.0 中是默認關(guān)閉的,可以通過 Connection: keep-alive; 開啟 ,HTTP/1.1 默認是開啟的,無論加沒加 Connection: keep-alive;
所謂長連接,即在 HTTP 請求建立 TCP 連接時,請求結(jié)束,TCP 連接不斷開,繼續(xù)保持一段時間(timeout),在這段時間內(nèi),同一客戶端向服務(wù)器發(fā)送請求都會復(fù)用該 TCP 連接,并重置 timeout 時間計數(shù)器,在接下來 timeout 時間內(nèi)還可以繼續(xù)復(fù)用 TCP 。這樣無疑省略了反復(fù)創(chuàng)建和銷毀 TCP 連接的損耗。
timeout 時間到了之后,TCP會立即斷開連接嗎?
若兩小時(timeout)沒有收到客戶的數(shù)據(jù),服務(wù)器就發(fā)送一個探測報文段,以后則每隔 75 秒發(fā)送一次。若一連發(fā)送 10 個探測報文段后仍無客戶的響應(yīng),服務(wù)器就認為客戶端出了故障,接著就關(guān)閉這個連接。
——摘自謝希仁《計算機網(wǎng)絡(luò)》
為什么 HTTP/2 引入多路復(fù)用?
這是因為:
HTTP/1.x 雖然引入了 keep-alive 長連接,但它每次請求必須等待上一次響應(yīng)之后才能發(fā)起,
所以,在 HTTP/1.1 中提出了管道機制(默認不開啟),下一次的請求不需要等待上一個響應(yīng)來之后再發(fā)送,但這要求服務(wù)端必須按照請求發(fā)送的順序返回響應(yīng),當(dāng)順序請求多個文件時,其中一個請求因為某種原因被阻塞時,在后面排隊的所有請求也一并被阻塞,這就是隊頭阻塞 (Head-Of-Line Blocking)
人們采取了很多方法去解決,例如使用多個域名、引入雪碧圖、將小圖內(nèi)聯(lián)等,但都沒有從根本上解決問題
HTTP/2 是怎么做的喃?
首先它引入了 幀(frame)和流(stream),因為 HTTP/1.x 是基于文本的,因為是文本,就導(dǎo)致了它必須是個整體,在傳輸是不可切割的,只能整體去傳
既然,HTTP/2 是基于二進制流的,它就可以把 HTTP 消息分解為獨立的幀,交錯發(fā)送,然后在另一端通過幀中的標(biāo)識重新組裝,這就是多路復(fù)用
這就實現(xiàn)了在同一個TCP連接中,同一時刻可以發(fā)送多個請求和響應(yīng),且不用按照順序一一對應(yīng),即使某個請求任務(wù)耗時嚴(yán)重,也不會影響到其它連接的正常執(zhí)行
HTTP/1.x keep-alive 與 HTTP/2 多路復(fù)用區(qū)別
總結(jié)一下,HTTP/1.x keep-alive 與 HTTP/2 多路復(fù)用區(qū)別:
HTTP/1.x 是基于文本的,只能整體去傳;HTTP/2 是基于二進制流的,可以分解為獨立的幀,交錯發(fā)送
HTTP/1.x keep-alive 必須按照請求發(fā)送的順序返回響應(yīng);HTTP/2 多路復(fù)用不按序響應(yīng)
HTTP/1.x keep-alive 為了解決隊頭阻塞,將同一個頁面的資源分散到不同域名下,開啟了多個 TCP 連接;HTTP/2 同域名下所有通信都在單個連接上完成
HTTP/1.x keep-alive 單個 TCP 連接在同一時刻只能處理一個請求(兩個請求的生命周期不能重疊);HTTP/2 單個 TCP 同一時刻可以發(fā)送多個請求和響應(yīng)
“HTTP/1.x 的 keep-alive與 HTTP/2 多路復(fù)用的區(qū)別是什么?”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
名稱欄目:HTTP/1.x的keep-alive與HTTP/2多路復(fù)用的區(qū)別是什么?
URL網(wǎng)址:http://www.2m8n56k.cn/article18/ihgddp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、虛擬主機、云服務(wù)器、標(biāo)簽優(yōu)化、App開發(fā)、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)