HTTP1.0、HTTP 1.1、HTTP 2.0主要區別
HTTP1.0、HTTP 1.1、HTTP 2.0之間的主要區別
- HTTP1.0與HTTP 1.1的主要區別
- 長連線
- 節約頻寬
- HOST域
- HTTP1.1與HTTP 2.0的主要區別
- 多路複用
- 二進位制分幀
- 首部壓縮
- 伺服器推送
一、HTTP1.0與HTTP 1.1的主要區別
長連線
HTTP 1.0需要使用keep-alive引數來告知伺服器端要建立一個長連線,而HTTP1.1預設支援長連線。
HTTP是基於TCP/IP協議的,建立一個TCP連線是需要經過三次握手的,有一定的開銷,如果每次通訊都要重新建立連線的話,對效能有影響。因此最好能維持一個長連線,可以用一個長連線來發多個請求。
節約頻寬
HTTP 1.1支援只發送header資訊(不帶任何body資訊),如果伺服器認為客戶端有許可權請求伺服器,則返回100,否則返回401。客戶端如果接收到100,才開始把請求body傳送到伺服器。
這樣當伺服器返回401的時候,客戶端就可以不用傳送請求body了,節約了頻寬。
另外HTTP還支援傳送內容的一部分。這樣當客戶端已經有一部分的資源後,只需要跟伺服器請求另外的部分資源即可。這是支援檔案斷點續傳的基礎。
HOST域
現在可以用web server(例如tomat),設定虛擬站點是非常常見的,也即是說,web server上的多個虛擬站點可以共享同一個ip和埠。
HTTP1.0是沒有host域的,HTTP1.1才支援這個引數。
一、HTTP1.1與HTTP 2.0的主要區別
HTTP 2.0的出現,相比於HTTP 1.x,大幅度的提升了web效能。在與HTTP/1.1完全語義相容的基礎上,進一步減少了網路延遲。而對於前端開發人員來說,無疑減少了在前端方面的優化工作。
下面基於HTTP 2.0協議的幾個基本技術點來說明HTTP1.1與HTTP2.0的區別
多路複用
允許同時通過單一的 HTTP/2 連線發起多重的請求-響應訊息。
眾所周知,在HTTP/1.1協議中,瀏覽器客戶端在同一時間針對同一域名的請求有一定資料限制。超過限制數目的請求會被阻塞。
HTTP2.0使用了多路複用的技術,做到同一個連線併發處理多個請求,而且併發請求的數量比HTTP1.1大了好幾個數量級。
當然HTTP1.1也可以多建立幾個TCP連線,來支援處理更多併發的請求,但是建立TCP連線本身也是有開銷的。
TCP連線有一個預熱和保護的過程,先檢查資料是否傳送成功,一旦成功過,則慢慢加大傳輸速度。因此對應瞬時併發的連線,伺服器的響應就會變慢。所以最好能使用一個建立好的連線,並且這個連線可以支援瞬時併發的請求。
在過去,HTTP效能優化的關鍵並不在於高頻寬,而是低延遲。
單連線多資源的方式,減少服務端的連結壓力,記憶體佔用更少,連線吞吐量更大
由於 TCP 連線的減少而使網路擁塞狀況得以改善,同時慢啟動時間的減少,使擁塞和丟包恢復速度更快
二進位制分幀
在不改動HTTP/1.x的語義、語法、狀態嗎、URI以及首部欄位……的情況下,HTTP/2是如何作做到“突破HTTP1.1的效能限制,改進傳輸效能,實現低延遲和高吞吐量”的?
關鍵之一就是在應用層(HTTP/2)和傳輸層(TCP or UDP)之間增加一個二進位制分幀層。
首部壓縮
HTTP1.1不支援header資料的壓縮,HTTP2.0使用HPACK演算法對header的資料進行壓縮,這樣資料體積小了,在網路上傳輸就會更快。
伺服器推送
服務端推送是一種在客戶端請求之前傳送資料的機制。
在HTTP/2中,伺服器可以對客戶端的一個請求傳送多個響應。
Server Push 讓HTTP1.x時代使用內嵌資源的優化手段變得沒有意義;
意思是說,當我們對支援HTTP2.0的web server請求資料的時候,伺服器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次建立連線傳送請求到伺服器端獲取。這種方式非常合適載入靜態資源。
伺服器推送可以快取,並且在遵循同源的情況下,不同頁面之間可以共享快取。
因此當客戶端需要的資料已快取時,客戶端直接從本地載入這些資源就可以了,不用走網路,速度自然是快很多的。