HTTP 和 HTTPS 之間除了安全性區別外,還有哪些區別

2023-11-27 21:01:22

HTTP 和 HTTPS 是兩種常見的網路協定,它們都是用於在瀏覽器和伺服器之間傳輸資料的。但是,它們之間也有一些重要的區別,這些區別涉及到資料的安全性、傳輸效能、使用成本和搜尋排名等方面。本文將從以下幾個方面來介紹 HTTP 和 HTTPS 的區別,本文內容大綱如下:

資料的安全性

HTTP 協定是一種明文傳輸協定,它不對資料進行任何加密或驗證,這意味著任何人都可以在網路上截獲、檢視或修改 HTTP 傳輸的資料,這就存在很大的安全風險,尤其是對於一些敏感的資訊,如使用者名稱、密碼、銀行卡號、身份證號等。

HTTPS 協定是一種安全傳輸協定,它在 HTTP 的基礎上增加了 SSL/TLS 層,SSL/TLS 是一種加密和認證技術,它可以對資料進行加密、解密、簽名和驗證,這樣就可以保證資料的機密性、完整性和身份真實性,防止資料被第三方竊取或篡改。

如上圖,HTTPS 流程包含握手和後續的資料傳輸,握手的目的是為了使用者端與伺服器端協商加密演演算法等引數。

HTTPS 協定的工作原理大致如下:

  1. 使用者端首次請求伺服器,告訴伺服器自己支援的協定版本,支援的加密演演算法及壓縮演演算法,並生成一個亂數(client random)告知伺服器。

使用者端需要提供的資訊:

  • 支援的協定版本,如 TSL1.0 版本
  • 使用者端生成的亂數,用以稍後生成對稱金鑰
  • 支援的加密演演算法;支援的壓縮方法等
  1. 伺服器確認雙方使用的加密方法,並返回給使用者端證書以及一個伺服器生成的亂數(server random)

伺服器需要提供的資訊:

  • 協定的版本
  • 加密的演演算法
  • 伺服器生成的亂數
  • 伺服器證書
  1. 使用者端收到證書後,首先驗證證書的有效性,然後生成一個新的亂數(premaster secret),並使用數位憑證中的公鑰,加密這個亂數,傳送給伺服器。

使用者端會對伺服器下發的證書進行驗證,驗證通過後,使用者端會再次生成一個亂數(premaster secret),然後使用伺服器證書中的公鑰進行加密,以及放一個 ChangeCipherSpec 訊息即編碼改變的訊息,還有整個前面所有訊息的 hash 值,進行伺服器驗證,然後用新祕鑰加密一段資料一併行送到伺服器,確保正式通訊前無誤。

  1. 伺服器接收到加密後的亂數後,使用私鑰進行解密,獲取這個亂數(premaster secret)。

  2. 最後,伺服器和使用者端根據約定的加密方法,使用前面提到的三個亂數(client random, server random, premaster secret),生成對稱金鑰,用來加密接下來的整個對話過程。伺服器端用對稱金鑰加密響應資料傳給使用者端,使用者端用對稱金鑰解密響應資料,得到明文資料。

傳輸效能

要討論傳輸效能,需要針對不同的 HTTP 版本做說明,

HTTPS VS HTTP 1.1

在 HTTP 1.1 中,HTTP 1.1 的效能比 HTTPS 還要好一些,主要是因為 HTTPS 只是在 HTTP 1.1 協定上增加了 TLS 層,沒有其他方面的修改。

增加了 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 協定,以提高網站的安全性和競爭力。

最後

感謝大家閱讀,希望能給大家提供幫助