做者:較瘦@毛豆前端前端
HTTP/2 是 HTTP 協議自 1999 年 HTTP 1.1 發佈後的首個更新,主要基於 SPDY 協議。由互聯網工程任務組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工做小組進行開發。該組織於2014年12月將HTTP/2標準提議遞交至IESG進行討論,於2015年2月17日被批准。HTTP/2標準於2015年5月以RFC 7540正式發表git
HTTP/2 採用二進制格式傳輸數據,而非 HTTP/1.x 的文本格式,二進制協議解析起來更高效。 HTTP/1 的請求和響應報文,都是由起始行,首部和實體正文(可選)組成,各部分之間以文本換行符分隔。HTTP/2 將請求和響應數據分割爲更小的幀,而且它們採用二進制編碼。github
HTTP/2 中,同域名下全部通訊都在單個鏈接上完成,該鏈接能夠承載任意數量的雙向數據流。每一個數據流都以消息的形式發送,而消息又由一個或多個幀組成。多個幀之間能夠亂序發送,根據幀首部的流標識能夠從新組裝。瀏覽器
多路複用,代替原來的序列和阻塞機制。全部就是請求的都是經過一個 TCP鏈接併發完成。 HTTP 1.x 中,若是想併發多個請求,必須使用多個 TCP 連接,且瀏覽器爲了控制資源,還會對單個域名有 6-8個的TCP連接請求限制服務器
這一特性,使性能有了極大提高:併發
同個域名只須要佔用一個 TCP 鏈接,消除了因多個 TCP 鏈接而帶來的延時和內存消耗。性能
單個鏈接上能夠並行交錯的請求和響應,之間互不干擾。編碼
在HTTP/2中,每一個請求均可以帶一個31bit的優先值,0表示最高優先級, 數值越大優先級越低。有了這個優先值,客戶端和服務器就能夠在處理不一樣的流時採起不一樣的策略,以最優的方式發送流、消息和幀。cdn
HTTP/2的另外一個強大的新功能是服務器爲單個客戶端請求發送多個響應的能力。也就是說,除了對原始請求的響應以外,服務器還能夠向客戶端推送額外的資源,而不須要客戶端明確請求每個資源!例如服務端能夠主動把JS和CSS文件推送給客戶端,而不須要客戶端解析HTML時再發送這些請求blog
每一個HTTP傳輸都包含一組描述傳輸資源及其屬性的標題。在HTTP/1.x中,此元數據始終以純文本形式發送,而且每次傳輸的開銷都會在任何位置增長500-800字節,若是使用HTTP Cookie,則會增長數千字節。爲了減小這種開銷並提升性能,HTTP/2使用兩種簡單但強大的技術使用HPACK壓縮格式來壓縮請求和響應頭元數據
HTTP/2經過支持請求與響應的多路複用來減小延遲,經過壓縮HTTP首部字段將協議開銷降至最低,同時增長對請求優先級和服務器端推送的支持。