HTTP和HTTPS的區別淺談

先說是什麼

什麼是http

在這裏插入圖片描述

超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,互聯網上應用最爲廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標準。設計HTTP的初衷是爲了提供一種發佈和接收HTML頁面的方法。

發展歷史

版本 產生時間 內容 發展現狀
HTTP/0.9 1991年 不涉及數據包傳輸,規定客戶端和服務器之間通信格式,只能GET請求 未形成標準
HTTP/1.0 1996年 傳輸內容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 正式作爲標準
HTTP/1.1 1997年 持久連接(長連接)、節約帶寬、HOST域、管道機制、分塊傳輸編碼 目前還在廣泛運用
HTTP/2 2015年 多路複用、服務器推送、頭信息壓縮、二進制協議等 可能會廣泛覆蓋

http1.0 https 1.1的具體區別

  1. 緩存處理,在 HTTP1.0 中主要使用 header 裏的 If-Modified-Since,Expires 來做 爲緩存判斷的標準,HTTP1.1 則引入了更多的緩存控制策略例如 Entity tag, If-Unmodified-Since, If-Match, If-None-Match 等更多可供選擇的緩存頭來控制緩 存策略。
  2. 帶寬優化及網絡連接的使用,HTTP1.0 中,存在一些浪費帶寬的現象,例如客戶 端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,並且不支持斷點 續傳功能,HTTP1.1 則在請求頭引入了 range 頭域,它允許只請求資源的某個部分, 即返回碼是 206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利 用帶寬和連接。
  3. 錯誤通知的管理,在 HTTP1.1 中新增了 24 個錯誤狀態響應碼,如 409(Conflict) 表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示服務器上的某個資 源被永久性的刪除。
  4. Host 頭處理,在 HTTP1.0 中認爲每臺服務器都綁定一個唯一的 IP 地址,因此, 請求消息中的 URL 並沒有傳遞主機名(hostname)。但隨着虛擬主機技術的發展, 在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它 們共享一個 IP 地址。HTTP1.1 的請求消息和響應消息都應支持 Host 頭域,且請求 消息中如果沒有 Host 頭域會報告一個錯誤(400 Bad Request)。
  5. 長連接,HTTP 1.1 支持長連接(PersistentConnection)和請求的流水線 (Pipelining)處理,在一個 TCP 連接上可以傳送多個 HTTP 請求和響應,減少了建 立和關閉連接的消耗和延遲,在 HTTP1.1 中默認開啓 Connection: keep-alive,一 定程度上彌補了 HTTP1.0 每次請求都要創建連接的缺點。

https1.x 和 http2.0的區別

  1. 新的二進制格式(Binary Format),HTTP1.x 的解析是基於文本。基於文本協議的 格式解析存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然 很多,二進制則不同,只認 0 和 1 的組合。基於這種考慮 HTTP2.0 的協議解析決定 採用二進制格式,實現方便且健壯。
  2. 多路複用(MultiPlexing),即連接共享,即每一個 request 都是是用作連接共享機 制的。一個 request 對應一個 id,這樣一個連接上可以有多個 request,每個連接的 request 可以隨機的混雜在一起,接收方可以根據 request 的 id 將 request 再歸屬 到各自不同的服務端請求裏面。
  3. header 壓縮,如上文中所言,對前面提到過 HTTP1.x 的 header 帶有大量信息,而 且每次都要重複發送,HTTP2.0 使用 encoder 來減少需要傳輸的 header 大小,通訊 雙方各自 cache 一份 header fields 表,既避免了重複 header 的傳輸,又減小了需 要傳輸的大小。
  4. 服務端推送(server push),同 SPDY 1 一樣,HTTP2.0 也具有 server push 功能。

目前http的缺點(抓包工具、莫名其妙出現廣告)

  • 通信使用明文,內容可能被竊聽(重要密碼泄露)
  • 不驗證通信方身份,有可能遭遇僞裝(跨站點請求僞造)
  • 無法證明報文的完整性,有可能已遭篡改(運營商劫持)

什麼是https

可以理解爲身披SSL/TLS2外殼的HTTP。HTTPS是一種通過計算機網絡進行安全通信的傳輸協議,經由HTTP進行通信,利用SSL/TLS2建立全信道,公私鑰加密數據包。HTTPS使用的主要目的是提供對網站服務器的身份認證,同時保護交換數據的隱私與完整性。

總結http和https區別

  1. https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用
  2. http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議
  3. http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443
  4. http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全

http運行原理

在這裏插入圖片描述
戶端輸入URL回車,DNS解析域名得到服務器的IP地址,服務器在80端口監聽客戶端請求,端口通過TCP/IP協議(可以通過Socket實現)建立連接。HTTP屬於TCP/IP模型中的運用層協議,所以通信的過程其實是對應數據的入棧和出棧。(如下圖)
在這裏插入圖片描述

https運行原理

在這裏插入圖片描述
具體理解可參考本鏈接

抓包工具是如何實現監聽https的?

在這裏插入圖片描述
第一步,Fiddler截獲客戶端發送給服務器的HTTPS請求,Fiddler僞裝成客戶端向服務器發送請求進行握手 。
第二步,服務器發回相應,Fiddler獲取到服務器的CA證書, 用根證書(這裏的根證書是CA認證中心給自己頒發的證書)公鑰進行解密, 驗證服務器數據簽名, 獲取到服務器CA證書公鑰。然後Fiddler僞造自己的CA證書(這裏的CA證書,也是根證書,只不過是Fiddler僞造的根證書), 冒充服務器證書傳遞給客戶端瀏覽器。
第三步,與普通過程中客戶端的操作相同,客戶端根據返回的數據進行證書校驗、生成密碼Pre_master、用Fiddler僞造的證書公鑰加密,並生成HTTPS通信用的對稱密鑰enc_key。
第四步,客戶端將重要信息傳遞給服務器, 又被Fiddler截獲。Fiddler將截獲的密文用自己僞造證書的私鑰解開, 獲得並計算得到HTTPS通信用的對稱密鑰enc_key。Fiddler將對稱密鑰用服務器證書公鑰加密傳遞給服務器。
第五步,與普通過程中服務器端的操作相同,服務器用私鑰解開後建立信任,然後再發送加密的握手消息給客戶端。
第六步,Fiddler截獲服務器發送的密文, 用對稱密鑰解開, 再用自己僞造證書的私鑰加密傳給客戶端。
第七步,客戶端拿到加密信息後,用公鑰解開,驗證HASH。握手過程正式完成,客戶端與服務器端就這樣建立了”信任“。
在之後的正常加密通信過程中,Fiddler如何在服務器與客戶端之間充當第三者呢?
服務器—>客戶端:Fiddler接收到服務器發送的密文, 用對稱密鑰解開, 獲得服務器發送的明文。再次加密, 發送給客戶端。
客戶端—>服務端:客戶端用對稱密鑰加密,被Fiddler截獲後,解密獲得明文。再次加密,發送給服務器端。由於Fiddler一直擁有通信用對稱密鑰enc_key, 所以在整個HTTPS通信過程中信息對其透明。


  1. SPDY是google於2012年推出來的,優化了https1.x的請求延遲、安全性等問題 ↩︎

  2. 附上較爲好理解的SSL/TLS文章. ↩︎ ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章