HTTP/2 是 HTTP 協(xié)議自 1999 年 HTTP 1.1 發(fā)布后的首個(gè)更新,主要基于 SPDY 協(xié)議。由互聯(lián)網(wǎng)工程任務(wù)組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小組進(jìn)行開發(fā)。該組織于2014年12月將HTTP/2標(biāo)準(zhǔn)提議遞交至IESG進(jìn)行討論,于2015年2月17日被批準(zhǔn)。HTTP/2標(biāo)準(zhǔn)于2015年5月以RFC 7540正式發(fā)表。
那 HTTP/2 到底有哪些具體變化呢?
二進(jìn)制分幀
先來理解幾個(gè)概念:
幀:HTTP/2 數(shù)據(jù)通信的最小單位消息:指 HTTP/2 中邏輯上的 HTTP 消息。例如請(qǐng)求和響應(yīng)等,消息由一個(gè)或多個(gè)幀組成。
流:存在于連接中的一個(gè)虛擬通道。流可以承載雙向消息,每個(gè)流都有一個(gè)唯一的整數(shù)ID。
HTTP/2 采用二進(jìn)制格式傳輸數(shù)據(jù),而非 HTTP 1.x 的文本格式,二進(jìn)制協(xié)議解析起來更高效。 HTTP / 1 的請(qǐng)求和響應(yīng)報(bào)文,都是由起始行,首部和實(shí)體正文(可選)組成,各部分之間以文本換行符分隔。HTTP/2 將請(qǐng)求和響應(yīng)數(shù)據(jù)分割為更小的幀,并且它們采用二進(jìn)制編碼。
HTTP/2 中,同域名下所有通信都在單個(gè)連接上完成,該連接可以承載任意數(shù)量的雙向數(shù)據(jù)流。每個(gè)數(shù)據(jù)流都以消息的形式發(fā)送,而消息又由一個(gè)或多個(gè)幀組成。多個(gè)幀之間可以亂序發(fā)送,根據(jù)幀首部的流標(biāo)識(shí)可以重新組裝。
多路復(fù)用
多路復(fù)用,代替原來的序列和阻塞機(jī)制。所有就是請(qǐng)求的都是通過一個(gè) TCP連接并發(fā)完成。 HTTP 1.x 中,如果想并發(fā)多個(gè)請(qǐng)求,必須使用多個(gè) TCP 鏈接,且瀏覽器為了控制資源,還會(huì)對(duì)單個(gè)域名有 6-8個(gè)的TCP鏈接請(qǐng)求限制,如下圖,紅色圈出來的請(qǐng)求就因域名鏈接數(shù)已超過限制,而被掛起等待了一段時(shí)間:
在 HTTP/2 中,有了二進(jìn)制分幀之后,HTTP /2 不再依賴 TCP 鏈接去實(shí)現(xiàn)多流并行了,在 HTTP/2中:
同域名下所有通信都在單個(gè)連接上完成。
單個(gè)連接可以承載任意數(shù)量的雙向數(shù)據(jù)流。
數(shù)據(jù)流以消息的形式發(fā)送,而消息又由一個(gè)或多個(gè)幀組成,多個(gè)幀之間可以亂序發(fā)送,因?yàn)楦鶕?jù)幀首部的流標(biāo)識(shí)可以重新組裝。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26