1. 程式人生 > 其它 >http 2.0、http 1.1、http 1.0 的區別

http 2.0、http 1.1、http 1.0 的區別

http 1.0 的特點(延遲原因):
  • 瀏覽器阻塞:對於同一個域名,瀏覽器客戶端傳送給服務端的連線數是有限制的,當連線數超過瀏覽器最大連線數的限制時,後續的請求就會發生阻塞;

  • DNS查詢:在瀏覽器中訪問一個網址或傳送一個請求時,瀏覽器首先需要得到域名對應的IP,即伺服器的IP地址,這就需要通過DNS來解析域名。若此前獲取過該域名的IP,可將結果快取起來,下次從快取(瀏覽器快取、系統快取、路由器快取)中查詢IP可節省一些時間;

  • 建立連線:http 是基於TCP協議的,每次請求資料,都需要與伺服器建立TCP連線,至少要經過三次握手,瀏覽器才能向伺服器傳輸報文資料;TCP連線還有一個特點——慢啟動,即 TCP 會進行自我“調諧”,最開始會限制資料傳輸速度,待資料傳輸成功後,會慢慢提高傳輸的速度。

http 1.1 相比 http 1.0 的優點
  • 快取處理:http 1.0 主要使用header中的if-modified-since、expires來判斷快取,http 1.1 增加了更多快取控制方式,如:if-unmodified-since、if-match、if-none-match
  • 錯誤處理:http 1.1 增加了更多的錯誤狀態響應碼,便於瀏覽器對錯誤型別的識別
  • host頭處理:http 1.0 的請求地址中不帶 主機IP地址,因為它認為每臺伺服器的IP地址都是唯一的;現在隨著虛擬主機技術的發展,一臺物理伺服器上可能存在多個虛擬主機,並且它們都共享一個IP地址,所以 http 1.1 進行了相應的升級,在 http 1.1 的請求和響應中都添加了host地址
  • 節約頻寬&斷點續傳:在 http 1.0 中,客戶端只需要某個物件的一部分,但伺服器會返回整個物件,浪費頻寬,並且不支援斷點續傳功能;在http 1.1 中,在header中增加了 range 欄位,可支援只向伺服器請求某個資源物件的一部分,返回碼是206,達到了充分利用頻寬和連線的目的
  • 長連線:http1.1支援長連線和請求的流水線處理,即在一個TCP連線上可以傳送多個http請求,在一定程度上減少了每個請求都需要建立連線和關閉連線的耗時
http 2.0 相比 http 1.x 的優點
  • 多路複用:指瀏覽器可同時向伺服器傳送多個http請求,伺服器也可同時處理多個請求,將結果返回給瀏覽器;若需規定某些請求的優先順序,則可以給這些請求攜帶上唯一標識,打上標籤,伺服器即可通過這些標籤識別

  • 頭部壓縮:http 請求和響應都是由 狀態行、請求/響應頭部、訊息主體 三部分構成,訊息主體通常會經過壓縮後再傳輸,但請求/響應頭部和狀態行都沒有經過壓縮,隨著web網頁越來越複雜,頭部的內容也越來越多,所以 http 2.0 使用encoder來減少需要傳輸的header內容大小,以此節省資源

    頭部壓縮的原理:
    	瀏覽器和伺服器需要維護一份相同的靜態字典和動態字典(類似鍵值對),以此支援header中的常見內容通過“鍵”的方式傳輸,大大減少傳輸資料量。
    
  • 文字格式=>二進位制格式:http 1.x都是採用文字格式,但是基於文字協議的格式解析起來有一些困難,因為文字的組合形式太多;http 2.0 採用二進位制格式,二進位制只有 0和1 的組合形式,解析更加容易

  • 服務端推送:指在客戶端請求之前就向客戶端傳送資料的機制。例如,當瀏覽器向服務端請求一個index.html頁面時,這個頁面還需要一些js和css檔案,在http1.0中就需要html檔案返回成功後,瀏覽器再次向伺服器請求這些資源,這就會導致網路空閒、網路利用率低。為了解決這個問題,在http2.0中,增加了服務端推送這個功能,即在瀏覽器請求一個html頁面時,伺服器就開始推送它需要的一些靜態資源,充分利用了空閒的網路,從而加快頁面載入時間

https 和 http的區別

https就是安全版的http,在http層和tcp層之間添加了 ssl 層,實現資料加密,增加網路連線的安全性。

  • https需要在CA申請證書
  • http是超文字傳輸協議,採用明文傳輸的方式,是無狀態的,而https是採用ssl加密傳輸協議,還可進行身份認證
  • http和https的連線方式不同,用的埠也不同,http是80埠,https的443埠
https的工作原理
  • 客戶端使用https連線向伺服器傳送請求,要求與伺服器建立ssl連線
  • 伺服器收到請求後,會將網站的安全證書資訊(包含公鑰)傳送給客戶端
  • 客戶端與服務端協商ssl連線的安全等級,即資訊加密的等級
  • 客戶端按照協商好的安全等級建立會話金鑰,然後用公鑰將會話金鑰加密,並將其傳送給服務端
  • 服務端收到加密後的會話金鑰後,用私鑰將其解密,得到會話金鑰,並利用會話金鑰加密和客戶端之間的通訊

多路複用和長連線的區別

多路複用 可允許多個請求同時在一個連線上並行執行,其中一個請求任務耗時嚴重,不會影響其他請求的正常執行;長連線 是多個請求排隊等待處理,後面的請求需等待前面請求返回後才能被執行,若某請求超時,後面的請求就會被阻塞。

可簡單理解為,一個(多路複用)並行執行多個請求,一個(長連線)序列執行多個請求。