http1.0
它的特點是每次請球和響應完畢后都會銷毀TCP 連接。同時規走前一個響應完成后才發送下一個請求。這樣做有兩個問題:
-
無法復用連接了。
每次請求都要創建新的TCP連接,完成三次握手和四次揮手。網絡利用率低
-
隊頭阻塞
如果前一個請求被某種原因阻塞,導致后續請求無法連接。
http1.1
http1.1 是 http1.0 的改進版.它做出了以下改進
-
長連接
http1.1允許在請求時增加請求頭connection:keep-al1ve, 這樣便允許后緩的客戶端確求在一段時周內復用之前的TCP 連接。
-
管道化
基于長連接的基礎,管道化可以不等第一個請求響應繼續發送后面的請求,但響應的順序還是按照請求的順序返回
-
緩存處理
新增響應頭 cache~control, 用于實現客戶端緩存。
-
斷點傳輸
在上傳/下截資源時,如果資源過大,將其分割為多個部分,分別上傳/下載,如果遇到網紹故障,可以從已經上傳/下載好的地方繼續請求,不用從頭開始,提高效率。
http2.0
http2.0優化了傳輸效率,它主要有以下改進:
-
二進制分幀
將傳輸的消息分為更小的二進制幀,每幀有自己的標識序號,即便被隨意打亂也能在另一端正確組裝
-
多路復用
基于二進制分幀,在同一域名下所有訪問都是從同一個tcp連接中走,并且不再有隊頭阻塞問題,也無須遵守響應順序
-
頭部壓縮
http2.0通過字典的形式,將頭部中的常見信息替換為更少的字符,極大的減少了頭部的數據量,從而實現更小的傳輸量
-
服務器推
http2.0 允許服務器直接推送消息給客戶端,無須客戶端明確的請求
http3.0
http3.0 目前還在草案階段,它完全拋棄了TCP協議,轉而使用UDP協議,是為了進一步提升性能。
雖然http2.0 進行了大量的優化,但它無法擺脫TCP協議本身的問題,比如建立連接時間長、對頭阻塞問題等等。
為了保證傳輸的可靠性,http3.0 使用了 QUIC 協議。