Http/2 是什麼?

Po-Ching Liu
Jul 9, 2021

http/2是什麼? http/2 其實就是http通訊協定的第二版,目前http版本由最初的0.9、1.0、1.1(1999年發布)在到現在的2(wiki)以及還在草案的3(wiki),那麼這些版本到底差在哪呢?本篇文章主要會介紹為何會有http/2 ? 它要改善甚麼 ? 以及它如何改善 ?

為何會有http/2 ? 它要改善甚麼 ?

http/2標準發布於2015年5月,其主要目的是透過一些措施改善瀏覽器瀏覽網頁加載的速度(page load)。目前大多數的瀏覽器已支援 http/2 (chrome, firefox, safari等)標準,又 http/2與 http/1.1有著高度的相容信,舉凡request method(post, get..etc), http status code, url, header 等等,因此對於web developer來說,只需要確保你的網站有支援https(因為瀏覽器只支援https 在http/2上)。那麼http/1.1與http/2到底相差多快呢,下列有幾個網站可以比較其差異,可以自行體驗!

  1. http://www.http2demo.io/
  2. https://www.httpvshttps.com/

http/2 是如何改善 ?

Request and response multiplexing (多路複用)

在http/1.1中,client端時常會同時發起多個request至server拿取檔案(像是js, css, image等),以此方式達到快速載入頁面。如下圖在http/1.1中會同時與server建立3個TCP connection,但是瀏覽器通常會限制TCP connection同時建立的數目。因此在http/2協定中,允許client端與同一server建立單一TCP connection並以非同步方式傳輸要的檔案。

Header compression (標頭壓縮)

每一個http的傳輸中都會攜帶一組header,在http/1.1中,header會是以明文(plain text)傳輸大小通常會是500-800 bytes,若有攜帶cookie也有可能會更大。因此在http/2中,會將request以及response的header使用HPACK演算法壓縮header的內容,此方法壓縮後可以減少85%-88%的大小。

Server push (伺服器推送)

在http/1.1中,通常client端request甚麼server就會回傳甚麼,例如: 當client request html那麼server將只會回傳html。但在http/2中,允許server主動推送有相關的資料給client,例如: 當client只request html,但是server知道client request此html後續也會request css, js等,因此server就會在client沒有request的情況下主動推送css, js檔給client。那server怎麼知道這些檔案是有相關性的呢? web developer將需要server push的檔案加上特定的描述即可。(描述)

Binary framing layer (二進制影格層)

在http/2中,header與body所挾帶的property與http/1.1相同(ex. verbs, methods),然而兩者在傳輸上會有不同。在http/2中,會將header以及body編碼成二進制在server 與client端中傳輸,在http/1.1中,則是以明文的方式傳輸。將訊息編碼成二進制進行傳輸,此特性是http/2 的其他特性的根本基礎。

總結

根據w3Techs網站,目前使用http/2的網站有45.7%,未來確實會變成主流,身為軟體工程師,還是多少理解來的好。此篇文章僅記錄筆者蒐集資料彙整結果,若有任何錯誤資訊還請直接點出,萬分感謝。

reference:
https://developers.google.com/web/fundamentals/performance/http2

--

--