淺談https和http2


最近被問到http2和https的相關知識,這是一篇補基礎的博客:

首先想說下https

什么是https

https的主要用處:

- 建立信息安全通道,保證數據傳輸的安全

- 確保網站的真實性,防止釣魚網站

https原理

就是https在http下加入ssl層,加密的詳細內容需要ssl/tls(運行在應用層上)

https的連接是無狀態的,https協議由ssl+http協議構建的可進行加密傳送,身份認證的網絡安全協議

首先:

加密和解密算法是公開的,密鑰是保密的(通信雙方才能獲取到)

對稱密鑰:

加密和解密使用的是同一個密鑰

不安全處:

密鑰通過網絡發送出去,在發送過程中被攔截,則傳輸的信息可以被窺視和篡改。

非對稱加密:

有一個叫做RSA的非對稱加密算法:

它不像之前的算法,雙方必須協商一個保密的密鑰,而是有一對鑰匙,一個是保密的,稱為私鑰,一個是公開的,稱為公鑰

⚠️:

用私鑰加密的數據,只有對應的公鑰才能解密,用公鑰加密的數據,只有對應的私鑰才能解密

 

對稱加密和非對稱加密的比較:

- 前者較快,后者較安全

 

解決速度和安全問題:

1)生成一個對稱加密算法的密鑰,用rsa的方式安全發給你

2)隨后不用rsa,只用這個密鑰,利用對稱加密算法來通信

 

為了防止中間人竊取到了密鑰,需要引入一個權威的證書頒發機構(ca)來解決

 

http2的簡介:

有4個主要的新特性:

- 二進制分幀

- 頭部壓縮

- 服務端推送

- 多路復用

- 優化手段

首先說下:

二進制分幀

http2是一個徹底的二進制協議(二進制協議就是一串字節流,通常包括消息頭(header)和消息體(body),消息頭的長度固定,並且消息頭包括了消息體的長度。這樣就能夠從數據流中解析出一個完整的二進制數據。),http2的二進制協議被稱為二進制分幀,http2協議的格式稱為幀,類似tcp中的數據報文:

 

幀由Frame Header和Frame Payload組成

- Type字段用來表示該幀中的Frame Payloaded保存的是header數據還是body數據,除了用於標識header/body,還有一些額外的Frame Type

- Length字段用來表示Frame Payload數據大小

- Frame Payloaded用來保存header和body數據

 多路復用:

在http的每個請求中都會建立一個tcp連接,意味着每個請求都要進行三次握手,這樣會浪費很多資源。瀏覽器會限制同一個域名下並發請求的個數,在http1中,一個常見的優化手段是把靜態資源分布到不同域名下,以此突破瀏覽器並發數的限制

在http2中,所有的請求可以公用一個Tcp連接

Stream Identifier 就是用來標識該幀屬於哪個請求的

當客戶端同時向服務器端發起多個請求,那么這些請求會被分解成一個個幀,每個幀都會在tcp鏈路中無序的傳輸,同一個請求的幀的Stream Identifier都是一樣的,當幀到達服務器之后,可以根據Stream Identifier來重新組合得到完整的請求

頭部壓縮:

在http1中,每次請求都會懈怠header數據,這些信息在每次請求就形成了浪費,所有http2

提出了HPACK的壓縮方式,用於減少http header在每次請求中消耗的流量

HPACK的壓縮原理:

客戶端和服務器端共同維護一個靜態字典:

 

服務器端推送:

服務器主動向客戶端推送數據,一次獲取全部資源

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM