1. 程式人生 > >深入理解 HTTP/1.x、HTTP/2 和 HTTPS

深入理解 HTTP/1.x、HTTP/2 和 HTTPS

分享圖片 緩存 使用 可選 加密傳輸 允許 對數 wid 進行

很多站長可能到現在都沒有理解 HTTP/1.x、HTTP/2 和 HTTPS 之間的區別和關系吧?說實話,明月也是“一知半解”的水準而已,今天看到了這篇文章感覺總結還算是比較全面,特此分享出來給大家就當是科普文了!

技術分享圖片圖片來自明月登樓博客【imydl.com】

一、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. 二進制協議

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

2. 完全多路復用

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

3. 報頭壓縮

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

4. 服務器推送

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

技術分享圖片圖片來自明月登樓博客【imydl.com】

三、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 包含動作:

瀏覽器打開一個 TCP 連接

瀏覽器發送 HTTP 請求到服務器端

服務器發送 HTTP 回應信息到瀏覽器

TCP 連接關閉

SSL 包含動作:

驗證服務器端

客戶端和服務器端選擇加密算法和密碼,確保雙方都支持

驗證客戶端(可選)

使用公鑰加密技術來生成共享加密數據

創建一個加密的 SSL 連接

基於該 SSL 連接傳遞 HTTP 請求

4、HTTPS 加密方式

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

非對稱加密:

加密使用的密鑰和解密使用的密鑰是不相同的,分別稱為:公鑰、私鑰;

公鑰和算法都是公開的,私鑰是保密的。

非對稱加密過程:

服務端生成配對的公鑰和私鑰

私鑰保存在服務端,公鑰發送給客戶端

客戶端使用公鑰加密明文傳輸給服務端

服務端使用私鑰解密密文得到明文

數字簽名:簽名就是在信息的後面再加上一段內容,可以證明信息沒有被修改過。

技術分享圖片圖片來自明月登樓博客【imydl.com】

至此,不知道各位看明白沒有,反正明月還是有點兒亂,好在原理上是基本明白了!自從上次清除了惡意代碼後(可參考【再次發現 functions.php 裏被植入惡意代碼】一文),現在明月的博客在手機端各個瀏覽器下瀏覽都是“非常 6”的感覺,加上上周又給 Nginx 使用了 Brotli 壓縮算法(可參考【給 Nginx 添加谷歌 Brotli 壓縮算法支持】一文)和 HTTP/2 Push Sever 的配置啟用,上述這些都是基於 又拍雲 CDN的支持下進行的。目前無論是速度還是安全性明月都是比較滿意的!

原文出處:

草根博客站長有話說, 深入理解 HTTP/1.x、HTTP/2 和 HTTPS, http://baijiahao.baidu.com/s?id=1603680663774367388&wfr=spider&for=pc

深入理解 HTTP/1.x、HTTP/2 和 HTTPS