HTTP2的升級前的調(diào)研

在引出http2之前,首先要知道目前互聯(lián)網(wǎng)上大多數(shù)請求都是http1.1 月培。在互聯(lián)網(wǎng)快速發(fā)展的今天,http1.1 已經(jīng)不能適應(yīng),盡管h2的普及率僅僅只有37.2 %(截止2019年5月份)瞭稼。http1.1 還是主流,但是h2的潮流必然勢不可擋腻惠。
目前我們的站點(diǎn)也在推進(jìn)http2的進(jìn)程环肘。所以寫一篇文章對h2的調(diào)研

HTTP 1.1 的問題

問題:傳輸串行化,效率低

  • 高延遲帶來的頁面加載速度降低集灌。盡管帶寬增大悔雹,但是受制于路由器硬件,最后一公里等問題欣喧,其延遲還是大腌零。
  • 并發(fā)連接有限。
  • 線頭阻塞唆阿,一個HTTP(請求/響應(yīng))完成之后益涧,才能進(jìn)行下一個。


上圖1可以看到驯鳖,隨著帶寬的增大闲询,延遲變化是有限的,尤其是4Mbps之后就沒有啥變化了浅辙,這受制于網(wǎng)絡(luò)設(shè)備等扭弧,也不完全因?yàn)閭鬏斁嚯x。
上圖2又可以看到记舆,rtt(延遲)越小鸽捻,頁面加載時間越小。

那怎么解決呢?御蒲?
這就要提到長肥管道(高延遲衣赶,高帶寬) 場景,以前是(http1.1)串行的發(fā)送删咱,如果能做到源源不斷的發(fā)和源源不斷的收屑埋,就能解決問題了。(對付長肥管道痰滋,最好的方法就是貼近其極限去發(fā)包摘能,注意不是將帶寬完全打滿,是貼近其極限敲街,這個詳細(xì)請看 長肥管道傳輸之痛與解決之道)

http1.1 做出的努力
為了解決上述問題团搞,其實(shí)http1.1 也做出了很多的事情。

  • 比如chrome瀏覽器只允許一個域發(fā)起6個TCP鏈接多艇。那么如果將資源分散到不通的域名逻恐,就能盡可能多發(fā)起一些請求。
  • 為了減少請求次數(shù)峻黍,將一些小圖片拼成大圖片复隆,一次性發(fā)送,這種叫做雪碧圖姆涩。
  • 為了減少請求次數(shù)挽拂,還做內(nèi)聯(lián),將圖片內(nèi)容做base64編碼嵌入到css或js中骨饿。
雪碧圖
內(nèi)聯(lián)

但是盡管如此亏栈,http1.1 還是沒有完美解決其痛點(diǎn)。

HTTP2 橫空出世

http2 為了能更好的推廣宏赘。其更好的發(fā)掘TCP的協(xié)議性能绒北,盡量對現(xiàn)有的HTTP協(xié)議不做改動,提供無縫的將http1.1 升級到 http2 的能力察署,如果客戶端不支持h2,那么可以再降級到http1.1 闷游。十分的友好。
訪問網(wǎng)站 https://http2.akamai.com/demo 可以看到一個 http1.1 和 http2 的對比箕母。其實(shí)這張地球的圖片是由非常多的小圖片組成的储藐。所以會大量對后端進(jìn)行請求。

http1.1
http1.1
  • 左上角 加載時間為5.2 s
  • 中間 并發(fā)了 6個連接嘶是,看樣子,每個連接也很耗時呢蛛碌。
  • 用的HTTP1.1 右下腳的waterfall 聂喇,越到后面的請求,Stalled越大(灰色部分)注意 size那列全是1.3kB
http2
http2
  • 左上角 加載時間為5.2 s
  • 中間 只有一條連接,也很迅速希太。
  • 用的HTTP2 右下角的waterfall克饶,其實(shí)也有 stalled,但是和http1比起來誊辉,小多了矾湃。注意 size那列全是1.1kB

為什么會有如此的差距呢
原因一:多路復(fù)用
其實(shí)上面也說了,這張地圖的照片是由很多小圖片組成的堕澄,也就是訪問的時候會由十分多的小圖片傳輸 邀跃。而h2是多路復(fù)用,所以當(dāng)然就效率高了蛙紫。

http1.1 和 http2 的傳輸對比

原因二:標(biāo)頭壓縮
在這里拍屑,http2 會將http報(bào)頭中的內(nèi)容進(jìn)行二進(jìn)制壓縮,其原理是利用的霍夫曼編碼(就是利用貪心算法)將數(shù)據(jù)二進(jìn)制化傳輸坑傅。另利用靜態(tài)字典和動態(tài)字典僵驰,如果傳輸過的內(nèi)容,不再重復(fù)傳輸唁毒,如一些請求都是GET請求蒜茴,則Method:Get 不會重復(fù)傳輸。
原因三:服務(wù)端推送
服務(wù)端將數(shù)據(jù)提前推送給客戶端浆西。

瀏覽器如何和服務(wù)端建立一個http2連接呢

h2 不一定必須要tls粉私,但是從瀏覽器發(fā)起的就必須要求是 tls 的∈已瑁基于tls的是 h2 毡鉴,基于 tcp 的是h2c 。所以這里主要介紹 h2 秒赤,而不是h2c猪瞬。
那么客戶端在tls握手階段會發(fā)起一個tls握手,client hello入篮。在client hello 中由一個 ALPN (Application Layer Protocol Negotiation)應(yīng)用層協(xié)議的協(xié)商陈瘦,帶上表示客戶端是支持 h2 的,服務(wù)端不支持h2的化潮售,可以退化到h1.1 痊项。

client hello
server hello

接下來協(xié)商好 h2 之后,就可以開始h2 的數(shù)據(jù)發(fā)送了酥诽。


http2 的 數(shù)據(jù)流

參考: 極客時間的 陶輝老師鞍泉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肮帐,隨后出現(xiàn)的幾起案子咖驮,更是在濱河造成了極大的恐慌边器,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件托修,死亡現(xiàn)場離奇詭異忘巧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)睦刃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門砚嘴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涩拙,你說我怎么就攤上這事际长。” “怎么了吃环?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵也颤,是天一觀的道長。 經(jīng)常有香客問我郁轻,道長翅娶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任好唯,我火速辦了婚禮竭沫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骑篙。我一直安慰自己蜕提,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布靶端。 她就那樣靜靜地躺著谎势,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杨名。 梳的紋絲不亂的頭發(fā)上脏榆,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音台谍,去河邊找鬼须喂。 笑死,一個胖子當(dāng)著我的面吹牛趁蕊,可吹牛的內(nèi)容都是我干的坞生。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼掷伙,長吁一口氣:“原來是場噩夢啊……” “哼是己!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起任柜,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤赃泡,失蹤者是張志新(化名)和其女友劉穎寒波,沒想到半個月后乘盼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體升熊,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年绸栅,在試婚紗的時候發(fā)現(xiàn)自己被綠了级野。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡粹胯,死狀恐怖蓖柔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情风纠,我是刑警寧澤况鸣,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站竹观,受9級特大地震影響镐捧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臭增,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一懂酱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧誊抛,春花似錦列牺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至随夸,卻和暖如春九默,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逃魄。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工荤西, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伍俘。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓邪锌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親癌瘾。 傳聞我的和親對象是個殘疾皇子觅丰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容