HTTP2 協議的目標是保持HTTP/1.x向後的語義兼容的狀況下,下降網絡延遲,提升傳輸效率。
相比於HTTP/1.x,它具有如下提升網絡傳輸性能的新特性:
容許經過一個單一的HTTP/2鏈接來發起多重請求。這個特性使得咱們須要針對HTTP/1.x作的線頭阻塞優化(css sprite, inline image)變得多餘。也就是說在HTTP/2協議中,咱們能夠再也不須要將多個請求合併爲一個單一的請求,來減小屢次創建鏈接帶來的延遲。css
首部壓縮移除了一些囉嗦的首部,減小傳輸的數據html
對於一個請求,能夠有多個響應。其中的一個場景是,當客戶端請求一個html文件的時候,服務端除了響應html文件以外,還能夠向客戶端推送這個html中可能使用到的css,js,image文件。避免沒必要要的round trip。數據庫
服務端推送的一個問題就是,服務端有時可能重複推送客服端緩存的內容,形成多餘的傳輸數據。其中的一個解決辦法是,客戶端增長一個Cache Digest 來告訴服務端哪些內容是緩存的。segmentfault
HTTP/2協議的內容是通過非對稱加密的
圖解HTTPS 協議加密緩存
keep-alive 容許設置空閒鏈接超時時長和最大鏈接數。一個包含keep-alive的響應頭以下:服務器
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache
(body)網絡
如上,表示該鏈接最大空閒時間爲5ms,而且該鏈接所能容許的最大請求數爲1000。超過1000個請求以後,自動斷開鏈接。這個有點像HTTP/2中的多路複用。雖然他們都是複用一個鏈接來完成屢次請求,可是其實他們是有區別的。性能
在HTTP/1.x中在一個鏈接中發送多個請求必須是有序的,也就是說必須是請求1完成了才能發送請求2。假設請求1的響應須要等待比較長的操做(IO操做,數據庫拆查詢),那麼在等待的這段時間中,服務器到客戶端的鏈路中是沒有數據傳輸的,咱們但願的在請求1等待響應的這段時間中,可以傳輸一些請求2的內容。這樣,總體的傳輸時間就會減小。優化
在HTTP/2中,數據都被拆分紅了幀,在客戶端或者服務端中,經過幀信息來從新組合一個請求的完整數據。這就解決了上述的問題。
加密
參考:
HTTP/2.0 相比1.0有哪些重大改進?
HTTP/2 對如今的網頁訪問,有什麼大的優化呢?體如今什麼地方?
keep-alive