簡單比較 http https http2

西南_張家輝發表於2018-02-05

http

超文字傳輸​​協議(HTTP)是用於傳輸諸如HTML的超媒體文件的應用層協議。它被設計用於Web瀏覽器和Web伺服器之間的通訊,但它也可以用於其他目的。 HTTP遵循經典的客戶端-服務端模型,客戶端開啟一個連線以發出請求,然後等待它收到伺服器端響應。 HTTP是無狀態協議,意味著伺服器不會在兩個請求之間保留任何資料(狀態)。雖然通常基於TCP / IP層,但可以在任何可靠的傳輸層上使用;也就是說,一個不會靜默丟失訊息的協議,如UDP。


Https

HTTP Strict Transport Security (通常簡稱為HSTS) 是一個安全功能,它告訴瀏覽器只能通過HTTPS訪問當前資源, 禁止HTTP方式.

Strict Transport Security解決了這個問題;只要你通過HTTPS請求訪問銀行網站,並且銀行網站配置好Strict Transport Security,你的瀏覽器知道自動使用HTTPS請求,這可以阻止黑客的中間人攻擊的把戲。

啟用 Strict Transport Security

開啟HSTS只需要當通過HTTPS方式訪問你的網站時,返回 Strict-Transport-SecurityHTTP 頭資訊: Strict-Transport-Security: max-age=expireTime [; includeSubdomains]


HTTPS與HTTP的一些區別

  1. HTTPS協議需要到CA申請證照,一般免費證照很少,需要交費。
  2. HTTP協議執行在TCP之上,所有傳輸的內容都是明文,HTTPS執行在SSL/TLS之上,SSL/TLS執行在TCP之上,所有傳輸的內容都經過加密的。
  3. HTTP和HTTPS使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
  4. HTTPS可以有效的防止運營商劫持,解決了防劫持的一個大問題。

image

使用SPDY加快你的網站速度

2012年google如一聲驚雷提出了SPDY的方案,大家才開始從正面看待和解決老版本HTTP協議本身的問題,SPDY可以說是綜合了HTTPS和HTTP兩者有點於一體的傳輸協議,主要解決:

  1. 降低延遲,針對HTTP高延遲的問題,SPDY優雅的採取了多路複用(multiplexing)。多路複用通過多個請求stream共享一個tcp連線的方式,解決了HOL blocking的問題,降低了延遲同時提高了頻寬的利用率。
  2. 請求優先順序(request prioritization)。多路複用帶來一個新的問題是,在連線共享的基礎之上有可能會導致關鍵請求被阻塞。SPDY允許給每個request設定優先順序,這樣重要的請求就會優先得到響應。比如瀏覽器載入首頁,首頁的html內容應該優先展示,之後才是各種靜態資原始檔,指令碼檔案等載入,這樣可以保證使用者能第一時間看到網頁內容。
  3. header壓縮。前面提到HTTP1.x的header很多時候都是重複多餘的。選擇合適的壓縮演算法可以減小包的大小和數量。
  4. 基於HTTPS的加密協議傳輸,大大提高了傳輸資料的可靠性。
  5. 服務端推送(server push),採用了SPDY的網頁,例如我的網頁有一個sytle.css的請求,在客戶端收到sytle.css資料的同時,服務端會將sytle.js的檔案推送給客戶端,當客戶端再次嘗試獲取sytle.js時就可以直接從快取中獲取到,不用再發請求了。SPDY構成圖:

image

SPDY位於HTTP之下,TCP和SSL之上,這樣可以輕鬆相容老版本的HTTP協議(將HTTP1.x的內容封裝成一種新的frame格式),同時可以使用已有的SSL功能。

HTTP2

HTTP2.0可以說是SPDY的升級版(其實原本也是基於SPDY設計的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下兩點

● HTTP2.0 支援明文 HTTP 傳輸,而 SPDY 強制使用 HTTPS

● HTTP2.0 訊息頭的壓縮演算法採用 HPACK,而非 SPDY 採用的 DEFLATE

http2 新特性

新的二進位制格式(Binary Format),HTTP1.x的解析是基於文字。基於文字協議的格式解析存在天然缺陷,文字的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進位制則不同,只認0和1的組合。基於這種考慮HTTP2.0的協議解析決定採用二進位制格式,實現方便且健壯。

多路複用(MultiPlexing),即連線共享,即每一個request都是是用作連線共享機制的。一個request對應一個id,這樣一個連線上可以有多個request,每個連線的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求裡面。多路複用原理圖:

image

header壓縮,如上文中所言,對前面提到過HTTP1.x的header帶有大量資訊,而且每次都要重複傳送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

服務端推送(server push),同SPDY一樣,HTTP2.0也具有server push功能。目前,有大多數網站已經啟用HTTP2.0,例如YouTuBe,淘寶網等網站,利用chrome控制檯可以檢視是否啟用H2:

chrome=>Network=>Name欄右鍵=>√Protocol
複製程式碼

引用

歡迎來我的主頁和留言探討問題

lpove.github.io/hexo/

相關文章