HTTP1和HTTP2的區別

1. Http1.x

缺陷:線程阻塞,在同一時間,同一域名的請求有一定數量限制,超過限制數目的請求會被阻塞。

2. Http1.0(短連接)

缺陷:瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都需要與服務器建立一個TCP連接(TCP連接的新建成本很高,因爲需要客戶端和服務器三次握手),服務器完成請求處理後立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求
解決方案:添加頭信息——非標準的Connection字段Connection: keep-alive

3. Http1.1

改進點:

  1. 持久連接(與Http1其它版本的最大區別
    引入了持久連接,即TCP連接默認不關閉,可以被多個請求複用,不用聲明Connection: keep-alive(對於同一個域名,大多數瀏覽器允許同時建立6個持久連接)
  2. 管道機制
    即在同一個TCP連接裏面,客戶端可以同時發送多個請求。
  3. 分塊傳輸編碼
    即服務端每產生一塊數據,就發送一塊,採用”流模式”而取代”緩存模式”。
  4. 新增請求方式
    PUT:請求服務器存儲一個資源;
    DELETE:請求服務器刪除標識的資源;
    OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求;
    TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷;
    CONNECT:保留將來使用
  5. 缺點:
    雖然允許複用TCP連接,但是同一個TCP連接裏面,所有的數據通信是按次序進行的。服務器只有處理完一個請求,纔會接着處理下一個請求。如果前面的處理特別慢,後面就會有許多請求排隊等着。這將導致“隊頭堵塞”

避免方式:一是減少請求數,二是同時多開持久連接

4. Http/2.0

特點:

  1. 採用二進制格式而非文本格式;
  2. 完全多路複用,而非有序並阻塞的、只需一個連接即可實現並行;(解決了線頭阻塞的問題,與Http1最重要的區別
  3. 使用報頭壓縮,降低開銷
  4. 服務器推送

4.1 二進制協議

HTTP/1.1 版的頭信息肯定是文本(ASCII編碼),數據體可以是文本,也可以是二進制。HTTP/2 則是一個徹底的二進制協議,頭信息和數據體都是二進制,並且統稱爲”幀”:頭信息幀和數據幀。
二進制協議解析起來更高效、“線上”更緊湊,更重要的是錯誤更少。

4.2 完全多路複用

HTTP/2 複用TCP連接,在一個連接裏,客戶端和瀏覽器都可以同時發送多個請求或迴應,而且不用按照順序一一對應,這樣就避免了”隊頭堵塞”。

4.3 報頭壓縮

  • HTTP 協議是沒有狀態,導致每次請求都必須附上所有信息。所以,請求的很多頭字段都是重複的,比如Cookie,一樣的內容每次請求都必須附帶,這會浪費很多帶寬,也影響速度。
  • 對於相同的頭部,不必再通過請求發送,只需發送一次;
  • HTTP/2 對這一點做了優化,引入了頭信息壓縮機制;
  • 一方面,頭信息使用gzip或compress壓縮後再發送;
  • 另一方面,客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,產生一個索引號,之後就不發送同樣字段了,只需發送索引號。

4.4 服務器推送

HTTP協議通常承載於TCP協議之上,在HTTP和TCP之間添加一個安全協議層(SSL或TSL),這個時候,就成了我們常說的HTTPS.

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