一、什么是http?https?
- HTTP 是瀏覽器與服務器之間以明文的方式傳送內容的一種互聯網通信協議。
- HTTPS是在HTTP的基礎上主要基于SPDF協議結合SSL/TLS加密協議,客戶端依靠證書驗證服務器身份傳遞加密信息的通信協議。
二、http各版本區別
-
HTTP/0.9:
- 僅支持GET請求,不支持請求頭
-
HTTP/1.0 :
- 默認短連接(一次請求建議一次TCP連接,請求完就斷開)。
- 支持GET、POST、 HEAD請求。
-
HTTP/1.1 :
- 默認長連接(一次TCP連接多次請求,支持PUT、DELETE、PATCH等六種請求,
- 增加host頭,支持虛擬主機,
- 支持斷點續傳功能。
-
HTTP/2.0:
- 多路復用,降低開銷(一次TCP連接可以處理多個請求)
- 服務器主動推送(相關資源一個請求全部推送);
- 解析基于二進制,解析錯誤少,更高效(HTTP/1.X解析基于文本);
- 報頭壓縮,降低開銷。
三、HTTPS請求過程(一次HTTPS請求要進行兩次HTTP傳輸)
客戶端發出https請求,請求服務端建立SSL連接
服務端收到https請求,申請和自制數字證書,得到公鑰和服務端私鑰,并將公鑰發送給客戶端。
客戶端驗證公鑰,不通過驗證則發出警告,通過驗證則產生一個隨機的客戶端私鑰。
客戶端將公鑰與客戶端私鑰進行對稱加密后傳給服務端。
服務端收到加密內容后,通過服務端私鑰進行非對稱解密,得到客戶端私鑰。
服務端將客戶端私鑰和內容進行對稱加密,并將加密內容發送給客戶端。
客戶端收到加密內容后,通過客戶端私鑰進行對稱解密,得到內容。
下圖https請求流程:
https請求過程.png
四、HTTPS怎么校驗證書的有效性?
- 證書里面包含了公鑰+各種信息+簽名,公鑰加密私鑰解,私鑰加密公鑰解。
- 通過私鑰將簽名解密后得到的信息和證書里面的信息比對就可以驗證證書的合法性了。
- 簽名是私鑰和各種信息加密后形成的簽名。
五、為什么HTTPS很安全卻不普及?
加密通信與普通的文本通信,要消耗更多的CPU和內存,緩存慢,通信成本較大;
HTTPS通信需要證書,而證書不是免費的。