Http1.0和1.1及2.0的區別

我們先來大致瞭解一下http發展史

http的歷史

http(超文本傳輸協議),在創建之初就是爲了將超文本標記語言(html)文檔從web服務端傳送給瀏覽器的客戶端。隨着我們網頁內容變得複雜,不單單有文字、圖片,還有css,js等等渲染,ajax的出現、移動互聯網的高速發展,隨着時代的變遷,http也一直升級優化,豐富自己的功能特性。

http的侷限

其中帶寬和延遲是影響http網絡請求的兩個重要的因素

  • 帶寬:
    雖然我們還停留在撥號上網的階段,但我們網絡基建有着飛速的發展,2G、3G、4G、5G,帶寬得到了極大的提升(雖然有時感覺還是達不到運營商承諾的那樣,這是由於各個方面的複雜的原因決定了,但不否認網速的確提高了),我們對帶寬的影響關注度小了。
  • 延遲:
    • 瀏覽器阻塞:爲了提高衆多用戶的訪問速度和解決阻塞問題,瀏覽器默認會對同一御下的資源只保持一定的連接數(這個連接數是由瀏覽器內核決定的)
    • DNS查詢:dns系統需要實現域名、IP的轉換,提高轉換速度很重要(dns緩存的出現)
    • 建立連接:http傳輸文件需要利用tcp的三次握手連接,這就會存在和三次握手一樣的問題,建立連接需要經過多次確認消耗時間。

http1.0:

最早在1996年在網頁中使用,內容簡單,所以瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器處理完成後立即斷開TCP連接(無連接),服務器不跟蹤每個客戶端也不記錄過去的請求(無狀態)。

HTTP1.1:

到1999年廣泛在各大瀏覽器網絡請求中使用,HTTP/1.0中默認使用Connection: close。在HTTP/1.1中已經默認使用Connection: keep-alive(長連接),避免了連接建立和釋放的開銷,但服務器必須按照客戶端請求的先後順序依次回送相應的結果,以保證客戶端能夠區分出每次請求的響應內容。通過Content-Length字段來判斷當前請求的數據是否已經全部接收。不允許同時存在兩個並行的響應。

HTTP2.0:

HTTP/2引入二進制數據幀和流的概念,其中幀對數據進行順序標識,(流(stream):已建立連接上的雙向字節流;消息:與邏輯消息對應的完整的一系列數據幀;幀:HTTP2.0通信的最小單位,每個幀包含幀頭部,至少也會標識出當前幀所屬的流(stream id))這樣瀏覽器收到數據之後,就可以按照序列對數據進行合併,而不會出現合併後數據錯亂的情況。同樣是因爲有了序列,服務器就可以並行的傳輸數據,這就是流所做的事情。這些數據幀都在一個tcp連接(可以承載任意數量的雙向數據流)上並行發送。

http1.0和http1.1的主要區別如下:
1、緩存處理:1.1添加更多的緩存控制策略(如:Entity tag,If-Match)
2、網絡連接的優化:1.1支持斷點續傳
3、錯誤狀態碼的增多:1.1新增了24個錯誤狀態響應碼,豐富的錯誤碼更加明確各個狀態
4、Host頭處理:支持Host頭域,不在以IP爲請求方標誌
5、長連接:減少了建立和關閉連接的消耗和延遲。

http1.1和http2.0的主要區別:
1、新的傳輸格式:2.0使用二進制格式,1.0依然使用基於文本格式
2、多路複用:連接共享,不同的request可以使用同一個連接傳輸(最後根據每個request上的id號組合成正常的請求)
3、header壓縮:由於1.X中header帶有大量的信息,並且得重複傳輸,2.0使用encoder來減少需要傳輸的hearder大小
4、服務端推送:同google的SPDUY(1.0的一種升級)一樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章