1. 程式人生 > >HTTP1.0、HTTP1.1和HTTP2.0之間的區別

HTTP1.0、HTTP1.1和HTTP2.0之間的區別

HTTP1.0與HTTP1.1

1.長連線

HTTP1.0需要主動設定connection:keep-alive的連線方式,才能開啟長連線。
HTTP1.1預設支援長連線,在一個TCP連線上可以傳送多個HTTP請求和響應,減少了建立和關閉連線的消耗和延遲,一定程度上彌補了HTTP1.0每次請求都要建立連線的缺點。

2.頻寬優化

HTTP1.0中header和body必須一起傳送,有時會造成浪費頻寬的現象,例如客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了,並且不支援斷點續傳功能。
HTTP1.1則在請求頭引入了range頭資訊,允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用頻寬和連線。

3.快取處理

HTTP1.0中主要使用header裡的If-Modified-Since,Expires來做為快取判斷的標準。
HTTP1.1則引入了例如ETag,If-None-Match等更多可供選擇的快取頭來控制快取策略。

4.HOST頭域

HTTP1.0中認為每臺伺服器都繫結一個唯一的IP地址,因此,請求訊息中的URL並沒有傳遞主機名。
但隨著虛擬主機技術的發展,一臺伺服器上可以存在多個虛擬主機,共享一個IP地址。
HTTP1.1的請求訊息和響應訊息都應支援Host頭域,且請求訊息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。

5.新增錯誤狀態碼

HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示伺服器上的某個資源被永久性的刪除。

HTTP2.0新特性

1.多路複用

HTTP2.0採用多路複用的技術,可以做到在一個連線並行的處理多個請求。

2.header壓縮

HTTP1.0和1.1的header帶有大量資訊,而且每次都要重複傳送,HTTP2.0使用encoder來壓縮需要傳輸的header大小。

3.伺服器推送

客戶端對支援HTTP2.0的伺服器請求某個資源時,伺服器會順便把一些客戶端需要的別的資源一起推送過來,這樣只需要一次HTTP通訊就可以得到全部資源,提高了效能。

4.解析格式

HTTP1.0和1.1的解析是基於文字。基於文字協議的格式解析存在天然缺陷,文字的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進位制則不同,只認0和1的組合。基於這種考慮HTTP2.0的協議解析決定採用二進位制格式,實現方便且健壯。