期待已久的 Hypertext Transfer Protocol Version 2 (HTTP/2) 終於在 2015 年 2 月 28 日定稿囉,也有 RFC 標準文件(RFC7540)了。
到底 HTTP/2 與原本的 1.1 有什麼不同呢?我們來簡單導覽一下。
API 不用修改
HTTP/2 的多數 headers 與 1.1 是一樣的,這表示 HTTP/2 可以完美的向下相容 1.1,程式無需做太大修改。也因此目前多數主流瀏覽器皆已支援 HTTP/2 協議。
建立在 SPDY 的基礎上
幾年前 Google 曾發佈了令大家眼睛為之一亮的 SPDY 協議,標榜能加速 Web 的載入速度,並讓網站上的多重檔案可以併發下載。SPDY因為具備優異的網頁傳輸及處理效能,因此後來從眾多HTTP/2提案版本中脫穎而出,最終成為HTTP/2標準草案的原型。其競爭對手包含微軟的 HTTP Speed+Mobility 等等協議。
HTTP/2的許多關鍵功能也都來自於SPDY,最大的改變就是加入一個多工(Multiplexing)的功能,可以允許瀏覽器在同時間內對多個伺服器發送請求,並採用更高效率的標頭壓縮技術,整體而言,HTTP/2讓用戶端能以較少的連接數從伺服器端取得資料,大幅增加網路傳輸速度。
伺服器推送
HTTP/2 的一項新特色是加上了伺服器推送功能,伺服器可以主動推送內容到瀏覽器上。這增加了許多特別的新應用,例如可以在瀏覽器尚未發出請求前,預先推送 CSS 或頁面 Layout 到瀏覽器上,增加之後的頁面載入速度。
標頭壓縮與編碼
HEAD 在傳輸的時候,有蠻多重複或冗餘的資訊,這些資訊可藉由 Haffman 演算法壓縮 HEAD 來增加傳輸速度。
流程下載控制與優先級
藉由控制下載流程的優先級,可以讓 HTTP/2 的傳輸過程中,將最重要的內容優先下載,避免大量資訊堵在一起。
不強制採用加密傳輸
相較於 SPDY 強制要採用 https 協議,HTTP/2 並未強制傳輸要加密,不過在 HTTP/2 協議下,將更容易實現 TLS 傳輸加密。
如何使用 HTTP/2
基本上,主流瀏覽器大多已經支援。不過您可以在自己的伺服器上加裝 HTTP/2 模組來支援一些新的 HTTP/2 特性,例如 NodeJS 就有 node-http2
模組可以安裝,詳細的支援清單請看 HTTP/2 Implemention。
結語
對大多數的使用者來說,HTTP/2 的影響力不是那麼的大,因為瀏覽器很快就支援了,也不會有任何瀏覽網站上的影響。但對於工程師而言,就有很多眉眉角角要注意。例如前端過去常常依靠 CSS sprites 與 Assets 合併來優化頁面載入速度,也許未來的影響就沒有那麼大。後端則要考慮是否壓縮 HEAD 或採用 TLS 等等。整體而言,對網路世界依舊是好事,畢竟從 1.1 版推出以來已經 16 年沒有更新了,是時候邁向新時代的網路協議了。
這裡有有一部 5 分鐘的介紹影片,讓你快速了解 HTTP/2 到底哪裡不一樣了