HTTP 和 HTTPS 之間除了安全性區別外,還有哪些區別
HTTP 和 HTTPS 是兩種常見的網絡協議,它們都是用于在瀏覽器和服務器之間傳輸數據的。但是,它們之間也有一些重要的區別,這些區別涉及到數據的安全性、傳輸性能、使用成本和搜索排名等方面。本文將從以下幾個方面來介紹 HTTP 和 HTTPS 的區別,本文內容大綱如下:
圖片
數據的安全性
HTTP 協議是一種明文傳輸協議,它不對數據進行任何加密或驗證,這意味著任何人都可以在網絡上截獲、查看或修改 HTTP 傳輸的數據,這就存在很大的安全風險,尤其是對于一些敏感的信息,如用戶名、密碼、銀行卡號、身份證號等。
HTTPS 協議是一種安全傳輸協議,它在 HTTP 的基礎上增加了 SSL/TLS 層,SSL/TLS 是一種加密和認證技術,它可以對數據進行加密、解密、簽名和驗證,這樣就可以保證數據的機密性、完整性和身份真實性,防止數據被第三方竊取或篡改。
圖片
圖片來源 https://coolcao.com 2018/08/06/https/
如上圖,HTTPS 流程包含握手和后續的數據傳輸,握手的目的是為了客戶端與服務端協商加密算法等參數。
HTTPS 協議的工作原理大致如下:
- 客戶端首次請求服務器,告訴服務器自己支持的協議版本,支持的加密算法及壓縮算法,并生成一個隨機數(client random)告知服務器。
客戶端需要提供的信息:
- 支持的協議版本,如 TSL1.0 版本
- 客戶端生成的隨機數,用以稍后生成對稱密鑰
- 支持的加密算法;支持的壓縮方法等
- 服務器確認雙方使用的加密方法,并返回給客戶端證書以及一個服務器生成的隨機數(server random)
服務器需要提供的信息:
- 協議的版本
- 加密的算法
- 服務器生成的隨機數
- 服務器證書
- 客戶端收到證書后,首先驗證證書的有效性,然后生成一個新的隨機數(premaster secret),并使用數字證書中的公鑰,加密這個隨機數,發送給服務器。
客戶端會對服務器下發的證書進行驗證,驗證通過后,客戶端會再次生成一個隨機數(premaster secret),然后使用服務器證書中的公鑰進行加密,以及放一個 ChangeCipherSpec 消息即編碼改變的消息,還有整個前面所有消息的 hash 值,進行服務器驗證,然后用新秘鑰加密一段數據一并發送到服務器,確保正式通信前無誤。
- 服務器接收到加密后的隨機數后,使用私鑰進行解密,獲取這個隨機數(premaster secret)。
- 最后,服務器和客戶端根據約定的加密方法,使用前面提到的三個隨機數(client random, server random, premaster secret),生成對稱密鑰,用來加密接下來的整個對話過程。服務端用對稱密鑰加密響應數據傳給客戶端,客戶端用對稱密鑰解密響應數據,得到明文數據。
傳輸性能
要討論傳輸性能,需要針對不同的 HTTP 版本做說明,
HTTPS VS HTTP 1.1
在 HTTP 1.1 中,HTTP 1.1 的性能比 HTTPS 還要好一些,主要是因為 HTTPS 只是在 HTTP 1.1 協議上增加了 SSL/TLS 層,沒有其他方面的修改。
增加了 SSL/TLS 層后,需要額外的加密和解密的過程,這會增加數據的處理時間和傳輸時間,同時也會消耗更多的 CPU 和內存資源。另外 HTTPS 協議還需要進行證書的驗證和密鑰的協商,這也會增加連接的建立時間。
HTTP 1.1 連接建立過程只需要進行 TCP 的三次握手,而 HTTPS 協議的連接建立過程還需要進行 SSL/TLS 的握手,這會多出至少 6 次的往返時間(RTT)。
因此,HTTPS 的連接建立時間要比 HTTP 1.1 的連接建立時間長得多。
HTTP 2 VS HTTP 1.1
HTTP 2 比起 HTTP 1.1 的性能提升就比較多了,主要有以下幾點。
二進制分幀
HTTP 2 使用二進制分幀,可以減少數據的大小和格式的復雜度,提高數據的傳輸效率。
它主要修改了 HTTP 1.1 的報文傳輸格式。HTTP 1.1 以換行符作為純文本的分隔符,而 HTTP 2 將所有傳輸的信息分割為更小的消息和幀,并采用二進制格式對它們編碼,這些幀對應著特定數據流中的消息,他們都在一個 TCP 連接內復用。
多路復用
HTTP 2 支持多路復用,可以在一個連接上并發傳輸多個請求和響應,避免了隊頭阻塞和重復建立連接的開銷。
HTTP 2 可以在共享 TCP 連接的基礎上同時發送請求和響應。HTTP 消息可以被分解為獨立的幀,而不破壞消息本身順序的情況下交錯發出去,在另一端根據流標識符和首部將他們重新組裝起來。通過多路復用技術,可以避免 HTTP 舊版本的消息頭阻塞問題,極大提高傳輸性能。
首部壓縮
HTTP 2 支持首部壓縮,可以減少數據的傳輸量,節省了網絡的帶寬。
HTTP 2 使用了 HPACK 算法來壓縮頭字段,這種壓縮格式對傳輸的頭字段進行編碼,減少了頭字段的大小。同時,在兩端維護了索引表,用于記錄出現過的頭字段,后面在傳輸過程中就可以傳輸已經記錄過的頭字段的索引號,對端收到數據后就可以通過索引號找到對應的值。對比 HTTP 1.1 使用文本的形式傳輸消息頭,HTTP 2 的首部壓縮可以減少請求資源大小。
HTTP 2 缺點
說了這么多 HTTP 2 的優點,那 HTTP 2 的缺點我們也需要清楚。
- HTTP 2 建立連接的延時:HTTP 2 仍然基于 TCP 協議,因此需要進行 TCP 的三次握手和 TLS 的握手,這會消耗一定的時間,影響數據的傳輸效率。
- HTTP 2 隊頭阻塞沒有徹底解決:HTTP 2 雖然支持多路復用,可以在一個連接上并發傳輸多個請求和響應,但是如果其中一個數據流發生了丟包或延遲,那么整個 TCP 連接都會受到影響,導致后續的數據流也被阻塞。
- HTTP 2 多路復用容易超時:HTTP 2 的多路復用技術使得多個請求其實是基于同一個 TCP 連接的,那么如果某一個請求的處理時間過長,那么多個請求都可能超過客戶端的超時時間,導致請求失敗。
HTTP 3 VS HTTP 2
HTTP 3 相比 HTTP 2 的提升可以說是全方位的,底層的傳輸協議由 TCP 協議改為使用基于 UDP 協議的 QUIC 協議,在應用層實現了擁塞控制、可靠傳輸的特性。
優點
HTTP 3 的優點主要體現在它使用了 QUIC 協議,可以減少握手的延遲,提高連接的穩定性,支持更高效的多路復用,以及更好的適應網絡變化等
缺點
HTTP 3 的缺點主要體現在它仍然存在一些兼容性和穩定性的問題,有時候甚至會比 HTTP 2 稍微慢一點。這可能是由于擁塞控制算法的不同,或者是由于網絡設備和防火墻對 UDP 的限制或過濾所導致的。
大家可以看到不同 HTTP 版本之間的性能差異是很大的。HTTP 2 和 HTTP 3 都是默認建立在 HTTPS 之上的。所以如果想要更高的 HTTP 協議傳輸性能的話,可以使用 HTTP 2 或者 HTTP 3 協議。
使用成本
HTTP 的使用成本比起 HTTPS 而言就低的多了,主要是因為 HTTPS 協議需要申請和維護數字證書,這通常需要一定的費用,而且證書的有效期有限,需要定期更新
在業務開發中一個阿里云 HTTPS CA 的企業級證書一年的價格通常需要幾千人名幣.
另外,HTTPS 也需要消耗一丟丟的服務器資源,因為 TLS 層的加密和解密過程也需要 CPU 參與計算。
與之相比,HTTP 不需要申請和維護數字證書,也不需要更多的服務器資源,所以說 HTTP 協議的使用成本更低。
搜索排名
HTTPS 協議的搜索排名優于 HTTP 協議,主要是因為 HTTPS 協議可以提高用戶的信任度和安全感,從而提高用戶的訪問量和停留時間,這些都是搜索引擎優化(SEO)的重要因素。
另外,一些主流的搜索引擎,如 Google 和百度,也明確表示,HTTPS 協議是搜索排名的一個重要權重指標,也就是說,HTTPS 網站比 HTTP 網站在搜索排名中更有優勢。
HTTP 協議由于安全性較差,可能會導致用戶的流失和不滿,從而影響用戶的訪問量和停留時間,這些都會降低搜索引擎優化(SEO)的效果。而且,HTTP 協議也沒有得到搜索引擎的青睞,因此 HTTP 協議的搜索排名較低。
綜上所述,HTTPS 協議在安全性和搜索排名方面有明顯的優勢,而 HTTP 協議只是在成本控制方面會好一點。
隨著互聯網的發展,HTTPS 協議已經成為越來越多網站的選擇,而 HTTP 協議已經逐漸被淘汰。因此,建議網站的開發者和運營者盡快將 HTTP 協議升級為 HTTPS 協議,以提高網站的安全性和競爭力。