HTTP2前世此生

1、HTTP2的前世

在咱們所處的互聯網世界中,HTTP協議算得上是使用最普遍的網絡協議了。HTTP創建之初,主要就是爲了將HTML從web服務器傳送到客戶端的瀏覽器。可是近幾年web發展很是迅速,咱們的頁面變得複雜起來,有不少動畫效果以及ajax等技術獲取服務端數據,來豐富咱們的頁面展現,這些都是基於HTTP協議的。web

圖片描述

咱們能夠看到2015年之前很長一段時間都在使用HTTP1.x的協議,在1.0中比較突出的問題就是鏈接沒法複用head of line blocking這兩個問題。
鏈接沒法複用會致使每次請求都經歷三次握手和慢啓動,三次握手無疑會增長了大量的延遲時間,尤爲在高延遲的場景和移動端更爲突出,在1.1以後Connection的默認值就是Keep-Alive,能夠用一張圖來體現他們的區別:ajax

圖片描述

head of line blocking在第一個請求沒有收到回覆以前,後續發出的請求只能排隊。一旦前一個請求的request由於什麼緣由沒有抵達服務器,或者response由於網絡阻塞沒有及時返回,影響的就是全部後續請求,這將會致使帶寬沒法被充分利用。在1.1中運用了管道技術(HTTP Pipelining)來解決這個問題,它把多個HTTP請求放到一個TCP鏈接中一一發送,而在發送過程當中不須要等待服務器對前一個請求的響應,一樣用一張圖來體現他們的區別:瀏覽器

圖片描述

可是pipelining並不能完全解決holb的問題,好比只有GET,HEAD才能使用,POST不能使用,由於請求之間可能會存在前後依賴關係,而且在server端的response因爲遵循FIFO的原則仍是要求依次返回,等其它缺陷。服務器

2、HTTP2應運而生

HTTP1.x依然存在一些問題,直到2012年google提出了SPDY的方案,經過多路複用、請求優先級、header壓縮等功能來解決http1.x的遺留問題,可是google決定在2016年再也不繼續支持SPDY開發。就在這個SPDY催化劑的做用下,HTTP2應運而生,並且其實HTTP2就是以SPDY爲原型進行討論和制定的。網絡

3、HTTP2特性

HTTP2做爲新版協議,改動了不少細節而且增長了一些新的特性,這裏舉例幾個比較重要的特性:tcp

多路複用:經過多個request共享一個tcp鏈接的方式,一個request對應一個id,這樣一個鏈接上能夠有多個request,每一個鏈接的request能夠隨機的混雜在一塊兒,接收方能夠根據request的id將request再歸屬到各自不一樣的服務端請求裏面。這樣解決了http1.x holb的問題,下降了延遲同時提升了帶寬的利用率。性能

圖片描述

HTTP1.1和HTTP2的區別可能就是這樣了:測試

圖片描述

請求優先級:多路複用致使全部資源都是並行發送,那麼就須要優先級的概念了。把HTTP消息分解爲不少獨立的幀以後,就能夠經過優化這些幀的交錯和傳輸順序,每一個流均可以帶有一個31比特的優先值:0 表示最高優先級;2的31次方-1表示最低優先級。服務器能夠根據流的優先級,控制資源分配(CPU、內存、帶寬),在響應數據準備好以後,優先將最高優先級的幀發送給客戶端。優化

首部壓縮:HTTP2會壓縮首部元數據,在客戶端和服務器端使用「首部表」來跟蹤和存儲以前發送的鍵值對,對於相同的頭部,沒必要再經過請求發送。好比對同一資源的輪詢請求的場景,全部首部都自動使用以前請求發送的首部,那麼首部開銷就是零字節。若是首部發生變化了,那麼只須要發送變化的數據在Headers幀裏面,新增或修改的首部幀會被追加到「首部表」。動畫

圖片描述

二進制分幀:HTTP2在應用層和傳輸層之間增長了一個二進制分幀層,將全部傳輸的信息分割爲更小的消息和幀,並對它們採用二進制格式的編碼,其中HTTP1.x的首部信息會被封裝到Headers幀,而咱們的request body則封裝到Data幀裏面。

圖片描述

而且HTTP2的通訊都在一個鏈接上完成,這個鏈接能夠承載任意數量的雙向數據流。經過這種單鏈接多資源的方式,能夠更有效地利用TCP鏈接,減小服務端的壓力,內存佔用更少,鏈接吞吐量更大。

圖片描述

服務器推送:服務端推送是一種在客戶端請求以前發送數據的機制,HTTP2能經過push的方式將客戶端須要的內容預先推送過去,因此也叫「cache push」。客戶端若是退出某個業務場景,出於流量或者其它因素須要取消server push,也能夠經過發送RST_STREAM類型的frame來作到。

4、HTTP2的此生

HTTP2不會是萬金油,但抹了也不會有反作用。做爲新版本協議確定須要一段時間去普及,HTTP自己屬於應用層協議,和當年的網絡層協議IPV6不一樣,它離底層協議越遠,對網絡基礎硬件設施的影響就越小。其次HTTP2還考慮了與HTTP1.x的兼容問題,所以在升級新版本的時候並不會帶來太多的阻力。HTTP2最大的亮點在於多路複用,這對於瀏覽器的大型網站來講確定是福音,一樣移動端好比淘寶京東的APP,HTTP請求量很是大,HTTP2帶來的性能提高仍是很是明顯的。下圖是官方的一個測試網站,使用了HTTP1.1和HTTP2同時請求數百張圖片的時間差距仍是很是明顯的:

圖片描述

相關文章
相關標籤/搜索