這篇文章主要介紹了http2中多路復(fù)用的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
10年積累的成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有津南免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
回顧http1.1協(xié)議,我們了解到,雖然http1.1實(shí)現(xiàn)了tcp的長(zhǎng)連接,在一個(gè)tcp鏈接通道中,我們可以連續(xù)處理多個(gè)http請(qǐng)求響應(yīng),但是這個(gè)處理過(guò)程是半雙工模式,也就是同一時(shí)刻只能處理一個(gè)request的請(qǐng)求或者響應(yīng),后面的request必須等到前面的請(qǐng)求響應(yīng)之后才能進(jìn)行。
瀏覽器為了更加快速的加載頁(yè)面資源,于是針對(duì)同一域名設(shè)置了最大并發(fā)數(shù),這樣做能稍微加快速度,但是也帶了一些問(wèn)題,參看上一篇文章http1.1相對(duì)http2有哪些不足。
http2完全摒棄http1.1半雙工通信的方式,實(shí)現(xiàn)了全雙工通信,具體表現(xiàn)為:瀏覽器針對(duì)同一個(gè)域名的資源,只建立一個(gè)tcp連接通道,所有的針對(duì)這個(gè)域名的請(qǐng)求全部在這個(gè)通道中完成,并且引入了流的機(jī)制,這條通道可以同時(shí)處理多個(gè)request,這不同于http1.1的pepeline,http2的多路復(fù)用,對(duì)于request的響應(yīng)并不會(huì)因?yàn)樯弦粋€(gè)request的響應(yīng)未完成而阻塞,http2徹底解決了http層面的隊(duì)頭阻塞。
http2中在一個(gè)tcp通道中的所有http請(qǐng)求不分先后,不會(huì)阻塞,同樣是一個(gè)頁(yè)面中多個(gè)資源同時(shí)去請(qǐng)求,用http2來(lái)實(shí)現(xiàn)的話,過(guò)程如圖:
這張圖與上一篇文章中http1.1版本中的圖是有區(qū)別的,可以看到這里http請(qǐng)求并不會(huì)因?yàn)榍懊娴恼?qǐng)求未響應(yīng)而阻塞。
我們來(lái)通過(guò)幾張圖來(lái)演示一下http1.1到http1.1的pipeline在到http2的進(jìn)化。
先看第一張圖:
仔細(xì)觀察上圖,發(fā)現(xiàn)在http1.1版本中的一個(gè)tcp通道中,這是一個(gè)單通道,同一時(shí)刻只能處理一個(gè)http請(qǐng)求,并且必須按照順序。
再看第二張圖:
仔細(xì)觀察這張圖,雖然在一個(gè)tcp通道中實(shí)現(xiàn)了多個(gè)http并發(fā),但是返回的時(shí)候是會(huì)阻塞的,誰(shuí)先到達(dá),誰(shuí)先返回,順序絕對(duì)不能亂,這就是http1.1pipeline的弊端。還有另一個(gè)pipeline的限制,只能是冪等請(qǐng)求(get、head等)才能應(yīng)用pipeline,大部分瀏覽器默認(rèn)是關(guān)閉pipeline的。
再看第三張圖:
這張圖中在一個(gè)tcp鏈接通道中,同時(shí)進(jìn)行多個(gè)http請(qǐng)求和響應(yīng),仔細(xì)觀察請(qǐng)求順序和響應(yīng)順序無(wú)關(guān),速度相對(duì)于上面兩張圖明顯變快,并且頁(yè)面中的資源請(qǐng)求都在一個(gè)tcp通道中完成,有效的避免了tcp競(jìng)速,慢啟動(dòng)等因素。
上面只是演示了http2的傳輸方式,那么他是如何實(shí)現(xiàn)的呢?
http1.1是明文協(xié)議,解析http1.1的明文是基于文本。http2.0的協(xié)議采用的是二進(jìn)制格式。
http2為什么要采用二進(jìn)制格式呢?
1、基于文本解析的話,文本的表現(xiàn)形式有多樣性,要做到健壯性考慮的場(chǎng)景必然很多。
2、二進(jìn)制則只認(rèn)0和1的組合,解析速度更快。
那么在不改動(dòng) HTTP/1.1 的語(yǔ)義、?法、狀態(tài)碼、URI 以及?部字段等等的情況下, HTTP/2 是如何過(guò)渡到http1.1呢?
關(guān)鍵之?就是在應(yīng)?層(HTTP/2)和傳輸層(TCP or UDP)之間增加?個(gè)?進(jìn)制分幀層。如圖:
在?進(jìn)制分幀層中, HTTP/2 會(huì)將所有傳輸?shù)男畔⒎指顬楦?的消息并封裝在幀(frame)中,并對(duì)它們采??進(jìn)制格式的編碼 ,其中 HTTP1.1的?部信息會(huì)被封裝到 HEADER frame,?相應(yīng)的 Request Body 則封裝到 DATA frame ??。如上圖的HEADER frame和DATA frame分別對(duì)應(yīng)http1.1的請(qǐng)求頭和請(qǐng)求體。
對(duì)比如圖:
并且,HTTP/2 通信都在?個(gè)tcp連接上完成,這個(gè)連接會(huì)同時(shí)處理多個(gè)http的request,http2給每個(gè)http的request都分配唯一的streamId,而每個(gè)request切割出來(lái)的fram都共用這個(gè)streamId,這樣的話http2就可以基于這個(gè)streamid將切割的信息還原,http2通道中同時(shí)處理多個(gè)request的方式類似處理多個(gè)流,所以有些文章會(huì)指出http2實(shí)現(xiàn)了流方式傳遞信息。如圖:
上圖中每個(gè)大的藍(lán)色方塊代表一個(gè)http的request,每個(gè)request被切割為多個(gè)fream,并且被編號(hào),我們用黃紅綠三種顏色分別代表三個(gè)stream流,不同的顏色代表不同的streamid,http2接收到數(shù)據(jù)會(huì)根據(jù)其streamid自動(dòng)還原數(shù)據(jù),這樣就實(shí)現(xiàn)了在一個(gè)TCP連接通道中的流式傳輸,多個(gè)request都會(huì)復(fù)用這個(gè)TCP通道,實(shí)現(xiàn)了高效的復(fù)用。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“http2中多路復(fù)用的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
分享標(biāo)題:http2中多路復(fù)用的示例分析
瀏覽路徑:http://jinyejixie.com/article34/pgigse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站策劃、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)