背景介紹
要了解HTTP2.0,先了解一下HTTP超文本傳輸協(xié)議的歷史(HyperText Transfer Protocol),這是為了實(shí)現(xiàn)互聯(lián)網(wǎng)上內(nèi)容傳輸提出的協(xié)議,其歷史伴隨著互聯(lián)網(wǎng)的發(fā)展。整個HTTP協(xié)議發(fā)展歷程如下:
一句話介紹:
HTTP 0.9:基于GET請求的文本傳輸協(xié)議
HTTPS:安全的HTTP傳輸協(xié)議
HTTP 1.0:增加HTTP頭、擴(kuò)展PUT、POST等方法
HTTP 1.1:長連接、流水線支持,最廣泛使用的HTTP傳輸協(xié)議
SPDY:針對HTTP的增強(qiáng),工作在SSL層之上、HTTP層之下
HTTP 2.0:安全高效的下一代HTTP傳輸協(xié)議
根據(jù)W3Techs統(tǒng)計(jì),到現(xiàn)在為止,互聯(lián)網(wǎng)上前1000萬的網(wǎng)站,已經(jīng)有27.9%支持了HTTP2.0。
HTTP2.0的特性
內(nèi)容安全(Security),因?yàn)镠TTP2.0是基于HTTPS的,天然具有安全特性,通過HTTP2.0的特性可以避免單純使用HTTPS的性能下降。
二進(jìn)制格式(Binary Support),HTTP1.x的解析是基于文本。HTTP 2.0將所有的傳輸信息分割為更小的消息和幀,并對它們采用二進(jìn)制格式編碼,基于二進(jìn)制可以讓協(xié)議有更多的擴(kuò)展性,比如引入了幀來傳輸數(shù)據(jù)和指令。
多路復(fù)用(MultiPlexing),這個功能相當(dāng)于是長連接的增強(qiáng),每個request可以隨機(jī)的混雜在一起,接收方可以根據(jù)request的id將request再歸屬到各自不同的服務(wù)端請求里面。另外多路復(fù)用中,也支持了流的優(yōu)先級(Stream dependencies),允許客戶端告訴server哪些內(nèi)容是更優(yōu)先級的資源,可以優(yōu)先傳輸。
Header壓縮(Header compression),HTTP請求中header帶有大量信息,而且每次都要重復(fù)發(fā)送,HTTP2.0使用編解碼來header的傳輸,通訊雙方各自cache一份header fields表,減少header的開銷。
服務(wù)端推送(Server push),同SPDY一樣,HTTP2.0也具有server push功能。目前,有大多數(shù)網(wǎng)站已經(jīng)啟用HTTP2.0,如淘寶 利用chrome控制臺可以查看是否啟用HTTP2.0:chrome://net-internals/#http2 可以看到當(dāng)前頁面使用HTTP2.0的情況:
如何使用HTTP2.0
目前阿里云CDN已經(jīng)全面支持HTTP2.0,大部分主流瀏覽器也已經(jīng)支持該功能,但是需要服務(wù)端改造后才能使用,不過如果你使用了阿里云CDN,源站即便不支持也能夠享受HTTP2.0的特性,目前在官網(wǎng)可以自助開啟:
1、 開啟HTTPS證書 因?yàn)镠TTP2.0是依賴于HTTPS的,在控制臺開啟HTTP2.0需要提前開啟HTTPS,目前阿里云CDN已經(jīng)支持免費(fèi)證書功能,提前打開該功能即可:
2、 開啟HTTP2.0功能:
性能對比驗(yàn)證
目前我們提供了一個對比測試工具,可以比較直觀的看出來HTTP1.1和HTTP2.0的加載頁面的差異,針對180個小圖片,HTTP2.0顯示了強(qiáng)大的優(yōu)勢,而且越是弱網(wǎng)環(huán)境,其加速效果就更明顯:
小伙伴也可以通過下面頁面,自己體驗(yàn)本地使用HTTP2.0和HTTP1.1的對比效果
HTTP2.0和SPDY的關(guān)系
SPDY是Google提出的用來解決老的HTTP協(xié)議不足的一些新的方案,可以說是綜合了HTTPS和HTTP兩者優(yōu)點(diǎn)并加以改進(jìn)的傳輸協(xié)議。實(shí)踐證明SPDY解決了HTTP的一些頑疾,在性能上提升顯著,最終IETF(Internet Enginerring Task Force)正式考慮制定HTTP2.0的計(jì)劃,最后決定以SPDY為基礎(chǔ)起草HTTP2.0,SPDY的部分設(shè)計(jì)人員也被邀請參與了HTTP2.0的設(shè)計(jì)。
Google的測試表明,頁面加載時間相比于HTTP1.x減少了64%: