HTTP 0.9

特點:
- 只有一個請求行;
- 服務器僅回傳資料,沒有回應頭,
瓶頸:
- 僅支持HTML,無法傳輸其他型別檔案;
- 檔案編碼格式過少,僅局限于ASCII,
HTTP 1.0

特點:
- 引入請求頭和回應頭(資料型別、語言版本、編碼型別、用戶代理);
- 資料壓縮;
- 引入狀態碼;
- 提供了Cache快取機制(head里的快取頭:If-Modified-Since、Expires),
瓶頸:
- 僅支持短連接,對于包含多個請求的檔案,會大大增加開銷;
- 一個服務器僅支持一個域名;
- 因為在回應頭中需要指定資料大小,因此無法回應動態資料;
- 服務器只能傳遞完整的資料,而不能滿足“只想要資料的一部分”這樣的需求,會導致帶寬浪費;
- 不支持斷點續傳,
HTTP 1.1

特點:
- 支持持久連接,一次連接可以發送多個請求和回應(最多6個);【HTTP 1.1 基于串行檔案傳輸資料,因此這些請求必須是有序的,所以實際上我們只是節省了建立連接的時間,而獲取資料的時間并沒有減少,最大并發數問題,假設我們在 Apache 中設定了最大并發數 300,而因為瀏覽器本身的限制,最大請求數為 6,那么服務器能承載的最高并發數是 50,】
- 引入虛擬主機技術,讓一個服務器可以支持多個域名;
- 通過引入分塊傳輸編碼機制,支持動態內容;
- 引入Cookie與安全機制;
- 引入range頭域,可以只請求資源的一部分(狀態碼206);
- 優化快取策略(在head中,增加Etag、If-Unmodified-Since、If-Match、If-None-Match等快取頭);
- 增加錯誤狀態碼,
瓶頸:
- TCP慢啟動導致小檔案建立連接過慢;
- 資源下載機制不完善,無法實作資源下載時的優先級調整;
- 一個TCP連接只能處理一個請求,請求頭易阻塞,
SPDY
特點:
- 多路復用,降低延遲,HTTP2.0的多路復用即是基于此;
- 增加請求優先級,給request增加優先級,就可以讓重要的請求有限得到回應;
- header壓縮,借助通用的DEFLATE 演算法來減小包的大小和數量;
- 基于HTTPS;
- 服務器推送,在建立連接后,服務器可以主動向客戶端發送資料,
SPDY 位于 HTTP 之下,TCP 和 SSL 之上,這樣可以輕松兼容老版本的 HTTP 協議(將HTTP1.x 的內容封裝成一種新的 frame 格式),同時可以使用已有的 SSL 功能,
HTTP 2.0

特點:
- 引入二進制分幀層,將資料拆解成多個二進制編碼的幀;【HTTP1.x的決議是基于文本,基于文本協議的格式決議存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進制則不同,只認0和1的組合,基于這種考慮HTTP2.0的協議決議決定采用二進制格式,實作方便且健壯,】
- 使用多路復用技術,一個連接可以發送多個請求;【HTTP/2 對同一域名下所有請求都是基于流,也就是說同一域名不管訪問多少檔案,也只建立一路連接,同樣Apache的最大連接數為300,因為有了這個新特性,最大的并發就可以提升到300,比原來提升了6倍,一個request對應一個id,每個連接的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求里面,】
- 可以設定請求優先級;
- 服務器推送;
- 借助專門為首部壓縮設計的HPACK 演算法進行首部壓縮,
瓶頸:
- 單個資料包丟失會導致TCP上的隊頭阻塞;
- 握手產生的延時,
HTTP2.0可以說是 SPDY 的升級版(其實原本也是基于 SPDY 設計的),但是,HTTP 2.0 跟 SPDY 仍有不同的地方
HTTP 2.0 支持明文 HTTP 傳輸,而 SPDY 強制使用 HTTPS
HTTP 2.0 訊息頭的壓縮演算法采用 HPACK ,而 SPDY 采用的 DEFLATE
HTTP 3.0

特點:
- 基于UDP
- 實作了多路復用;
- 實作了流量控制、可靠傳輸;
- 實作了快速握手,
瓶頸:
- 兼容性尚不完整;
- 優化程度不高,
為什么需要頭部壓縮?
假定一個頁面有100個資源需要加載(這個數量對于今天的Web而言還是挺保守的), 而每一次請求都有1kb的訊息頭(這同樣也并不少見,因為Cookie和參考等東西的存在), 則至少需要多消耗100kb來獲取這些訊息頭,HTTP2.0可以維護一個字典,差量更新HTTP頭部,大大降低因頭部傳輸產生的流量,具體參考:HTTP/2 頭部壓縮技術介紹
HTTP2.0多路復用有多好?
HTTP 性能優化的關鍵并不在于高帶寬,而是低延遲,TCP 連接會隨著時間進行自我「調諧」,起扯訓限制連接的最大速度,如果資料成功傳輸,會隨著時間的推移提高傳輸的速度,這種調諧則被稱為 TCP 慢啟動,由于這種原因,讓原本就具有突發性和短時性的 HTTP 連接變的十分低效,
HTTP/2 通過讓所有資料流共用同一個連接,可以更有效地使用 TCP 連接,讓高帶寬也能真正的服務于 HTTP 的性能提升,
參考文章:
6張圖從HTTP/0.9進化到HTTP3.0
HTTP1.0、HTTP1.1 和 HTTP2.0 的區別
HTTP/2 多路復用技術分享
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304717.html
標籤:其他
上一篇:計算機網路——物理層
下一篇:第一章:計算機網路概述
