HTTP1.0,HTTP1.1,HTTPS和HTTP2.0的區別

勒了個浪發表於2019-04-16

HTTP1.0和HTTP1.1的一些區別

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

  2. 頻寬優化及網路連線的使用,HTTP1.0中,存在一些浪費頻寬的現象,例如客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了,並且不支援斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用頻寬和連線。 錯誤通知的管理,在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示伺服器上的某個資源被永久性的刪除。

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

  4. 長連線,HTTP 1.1支援長連線(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連線上可以傳送多個HTTP請求和響應,減少了建立和關閉連線的消耗和延遲,在HTTP1.1中預設開啟Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要建立連線的缺點。

HTTP1.0和1.1現存的一些問題

  1. HTTP1.x在傳輸資料時,每次都需要重新建立連線,無疑增加了大量的延遲時間,特別是在移動端更為突出。

  2. HTTP1.x在傳輸資料時,所有傳輸的內容都是明文,客戶端和伺服器端都無法驗證對方的身份,這在一定程度上無法保證資料的安全性。

  3. HTTP1.x在使用時,header裡攜帶的內容過大,在一定程度上增加了傳輸的成本,並且每次請求header基本不怎麼變化,尤其在移動端增加使用者流量。

  4. 雖然HTTP1.x支援了keep-alive,來彌補多次建立連線產生的延遲,但是keep-alive使用多了同樣會給服務端帶來大量的效能壓力,並且對於單個檔案被不斷請求的服務(例如圖片存放網站),keep-alive可能會極大的影響效能,因為它在檔案被請求之後還保持了不必要的連線很長時間。

HTTPS與HTTP的一些區別

  1. HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費。

  2. HTTP協議執行在TCP之上,所有傳輸的內容都是明文,HTTPS執行在SSL/TLS之上,SSL/TLS執行在TCP之上,所有 傳輸的內容都經過加密的。

  3. HTTP和HTTPS使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

  4. HTTPS可以有效的防止運營商劫持,解決了防劫持的一個大問題。

HTTP2.0的新特性

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

  2. 多路複用(MultiPlexing),即連線共享,即每一個request都是是用作連線共享機制的。一個request對應一個id,這樣一個連線上可以有多個request,每個連線的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求裡面。

  3. header壓縮,如上文中所言,對前面提到過HTTP1.x的header帶有大量資訊,而且每次都要重複傳送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

  4. 服務端推送(server push),HTTP2.0具有server push功能。

相關文章