次世代 HTTP -- HTTPS/HTTP 2.0

做爲一個前端,在 2018 年你確定聽過或者已經使用了 HTTPS 和 HTTP 2.0,若是你還沒了解過的話,那我讓我帶你一探究竟吧~前端

HTTP

超文本傳輸協議 -- HTTP,是被普遍使用的用於 Web 瀏覽器和服務器之間通訊的一個協議,它是無狀態協議,不會在請求與請求之間保存狀態和數據,一般基於 TCP/IP 層。算法

HTTP 從一開始的 0.9 版本,發展到 1.0/1.1 版本,其中經歷了緩存處理的改進、method 的增長和長鏈接的支持等等。HTTP 1.x 版本已經被使用超過了 20 年,直至今天還仍然被普遍採用。可是,隨着互聯網的飛速發展,這個版本存在着一些問題:瀏覽器

  • 基於 TCP/IP 的明文傳輸,可能會被竊聽,缺乏身份驗證與加密,可能會被假裝,沒法證實報文的完整,可能會被篡改,沒法保證數據的安全性。
  • 隊頭阻塞(head of line blocking),瀏覽器發出的請求都須要排隊,依次進行處理和響應。
  • 鏈接沒法複用,每次請求都須要從新創建鏈接,都必須通過三次握手和慢啓動,分別影響高延遲和大文件請求的場景。

安全問題首當其衝,在 1994 年的時候,爲傳輸安全保駕護航的 HTTPS 誕生了。緩存

HTTPS

HTTPS (HTTP over SSL/TLS),嚴格地講,並非一個單獨的協議,而是對工做在一加密鏈接(TLS 或 SSL)上的常規 HTTP 協議的稱呼。HTTP 先與 SSL 通信,再有 SSL 和 TCP 通信。安全

圖片

HTTPS = HTTP + 加密 + 認證 + 完整性保護服務器

HTTPS 加密的原理?

前面說到 HTTPS 是 over SSL 的,那麼也就是說通過了 SSL 這一加密處理方式進行了通訊過程的加密。併發

HTTPS 的加密包括了對稱與非對稱加密。因爲對稱加密,祕鑰容易被泄露,而非對稱加密解密的過程耗時又長,因此索性把這二者結合,利用非對稱加密來加密對稱加密的祕鑰,即利用了非對稱加密安全性高的特色,又利用了對稱加密速度快,效率高的好處。也就是所謂的混合加密加密

  • 非對稱加密操作系統

    • 首先,服務端保有公鑰和私鑰,提供公鑰向數字認證機構申請證書,將證書發送給客戶端
    • 客戶端利用瀏覽器內置的 CA 公鑰去解密證書
    • 若是證書沒問題,客戶端生成一個對稱加密的隨機祕鑰,再利用剛剛解密的服務器端的公鑰對隨機祕鑰進行加密,發送給服務器端
    • 服務端利用本身的私鑰解密,獲得隨機祕鑰
  • 對稱加密設計

    • 以後客戶端和服務端會利用這個非對稱加密加密過的隨機祕鑰,對以後的請求進行對稱加密。

如此一來,HTTPS 便解決了安全問題:

  • 全部信息都是加密傳播,黑客沒法竊聽。
  • 具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
  • 配備身份證書,防止身份被冒充。

PS: 爲何 12306 改版之前,證書那塊會顯示一個紅叉?

  1. 根證書不被操做系統信任,須要自行安裝證書。
  2. 其證書使用了不安全的 sha1 算法,未能經過瀏覽器驗證。

解決完安全問題,咱們來看看速度與延遲問題是如何被解決的。

攪局者 SPDY

2012 年,Google 提出 SPDY,爲 HTTP 2.0 的誕生奠基了一個十分紮實的基礎,(HTTP 2.0 的主要設計思想源自於 SPDY)它提出:

  • 多路複用(multiplexing)

    HTTP 1.x 在一條 TCP 鏈接上,多個請求只能串行執行。而 SPDY 使多個請求 stream 共享一個 TCP 鏈接的方式,作到了同時響應多個請求,解決了隊頭阻塞的問題。

  • 請求優先級(request prioritization)

    控制多路複用的請求優先級(例如設置 CSS 的優先級比圖片高)

  • header 壓縮

    顧名思義,對 header 進行壓縮。HTTP1.x 的 header 不少時候都是重複多餘的。選擇合適的壓縮算法能夠減少包的大小和數量。SPDY 對 header 的壓縮率能夠達到 80% 以上,低帶寬環境下效果很大,對解決慢啓動問題也有幫助。

  • 服務端推送(server push)

    服務端可以更快的把資源推送給客戶端。

  • 強制使用 HTTPS

HTTP 2.0

在 SPDY 的基礎之上,HTTP 2.0 誕生了,爲了給 HTTP 2.0 鋪路,Google 甚至在後期中止對 SPDY 的支持。HTTP 2.0 能夠說是 SPDY 的升級版,看看如下特性你就知道了:

  • 多路複用

    HTTP 2.0 讓每一個 request 對應一個 stream 並分配一個 id,經過一個鏈接多 stream 的方式,每一個 stream 的 frame 能夠隨機的混雜在一塊兒,併發響應。

多路複用

  • header 壓縮
  • 服務端推送

HTTP 2.0 與 SPDY 不一樣的地方

  • 新的二進制格式
  • 支持明文傳輸
  • hedaer 壓縮算法與 SPDY 不一樣

講了這麼多,但願能加強你對 HTTPS 和 HTTP 2.0 的瞭解。若有錯誤,懇請斧正!

相關文章
相關標籤/搜索