深入理解http1.x、http 2和https

keywords發表於2019-02-16

一、HTTP/1.x

Http1.x

  • 缺陷:執行緒阻塞,在同一時間,同一域名的請求有一定數量限制,超過限制數目的請求會被阻塞

http1.0

  • 缺陷:瀏覽器與伺服器只保持短暫的連線,瀏覽器的每次請求都需要與伺服器建立一個TCP連線(TCP連線的新建成本很高,因為需要客戶端和伺服器三次握手),伺服器完成請求處理後立即斷開TCP連線,伺服器不跟蹤每個客戶也不記錄過去的請求;
  • 解決方案

    • 新增頭資訊——非標準的Connection欄位Connection: keep-alive

http1.1:

  • 改進點:
  1. 持久連線

    • 引入了持久連線,即TCP連線預設不關閉,可以被多個請求複用,不用宣告Connection: keep-alive(對於同一個域名,大多數瀏覽器允許同時建立6個持久連線)
  2. 管道機制

    • 即在同一個TCP連線裡面,客戶端可以同時傳送多個請求。
  3. 分塊傳輸編碼

    • 即服務端沒產生一塊資料,就傳送一塊,採用”流模式”而取代”快取模式”。
  4. 新增請求方式

    • PUT:請求伺服器儲存一個資源;
    • DELETE:請求伺服器刪除標識的資源;
    • OPTIONS:請求查詢伺服器的效能,或者查詢與資源相關的選項和需求;
    • TRACE:請求伺服器回送收到的請求資訊,主要用於測試或診斷;
    • CONNECT:保留將來使用
  • 缺點:

    • 雖然允許複用TCP連線,但是同一個TCP連線裡面,所有的資料通訊是按次序進行的。伺服器只有處理完一個請求,才會接著處理下一個請求。如果前面的處理特別慢,後面就會有許多請求排隊等著。這將導致“隊頭堵塞”
    • 避免方式:一是減少請求數,二是同時多開持久連線

二、HTTP/2.0

  • 特點:

    1. 採用二進位制格式而非文字格式;
    2. 完全多路複用,而非有序並阻塞的、只需一個連線即可實現並行;
    3. 使用報頭壓縮,降低開銷
    4. 伺服器推送

1. 二進位制協議

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

2. 完全多路複用

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

3. 報頭壓縮

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

4. 伺服器推送

  • HTTP/2 允許伺服器未經請求,主動向客戶端傳送資源;
  • 通過推送那些伺服器任務客戶端將會需要的內容到客戶端的快取中,避免往返的延遲

三、HTTPS

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

1、HTTPS主要作用

- (1)對資料進行加密,並建立一個資訊保安通道,來保證傳輸過程中的資料安全;
- (2)對網站伺服器進行真實身份認證。

2、HTTPS和HTTP的區別

- 1、HTTPS是加密傳輸協議,HTTP是名文傳輸協議;
- 2、HTTPS需要用到SSL證照,而HTTP不用;
- 3、HTTPS比HTTP更加安全,對搜尋引擎更友好,利於SEO,
- 4、 HTTPS標準埠443,HTTP標準埠80;
- 5、 HTTPS基於傳輸層,HTTP基於應用層;

3、HTTPS和HTTP的工作過程區別

  • HTTP 包含動作:

    1. 瀏覽器開啟一個 TCP 連線
    2. 瀏覽器傳送 HTTP 請求到伺服器端
    3. 伺服器傳送 HTTP 回應資訊到瀏覽器
    4. TCP 連線關閉
  • SSL 包含動作:

    1. 驗證伺服器端
    2. 客戶端和伺服器端選擇加密演算法和密碼,確保雙方都支援
    3. 驗證客戶端(可選)
    4. 使用公鑰加密技術來生成共享加密資料
    5. 建立一個加密的 SSL 連線
    6. 基於該 SSL 連線傳遞 HTTP 請求

3、HTTPS加密方式

  • 對稱加密:加密和解密都是使用的同一個金鑰;
  • 非對稱加密:

    • 加密使用的金鑰和解密使用的金鑰是不相同的,分別稱為:公鑰、私鑰;
    • 公鑰和演算法都是公開的,私鑰是保密的。
    • 非對稱加密過程:
    1. 服務端生成配對的公鑰和私鑰
    2. 私鑰儲存在服務端,公鑰傳送給客戶端
    3. 客戶端使用公鑰加密明文傳輸給服務端
    4. 服務端使用私鑰解密密文得到明文
  • 數字簽名:簽名就是在資訊的後面再加上一段內容,可以證明資訊沒有被修改過。

“積跬步、行千里”—— 持續更新中~,喜歡留下個贊哦!

相關文章