面試問題: HTTP 與 HTTPS 的區別

語言: CN / TW / HK

theme: cyanosis

我報名參加金石計劃1期挑戰——瓜分10萬獎池,這是我的第3篇文章,點擊查看活動詳情

HTTP

基礎

HTTP 超文本傳輸協議 ,應用層協議。主要用於 Web 上傳輸超媒體文本的底層協議,經常在瀏覽器和服務器之間傳遞數據。通信就是以純文本的形式進行。

HTTP 是無狀態

無狀態是 HTTP 協議對客户端請求狀態沒有進行存儲,比如每次請求都需要重新登錄

HTTP 是無連接

無連接主要是限制每次連接只處理一個請求。每次請求都是客户發起請求,服務端響應請求,然後就斷開連接。這期間就是通過三次握手建立連接,四次揮手斷開連接。每次請求即便是多次請求並請求同一個資源,服務端都無法判斷是否是相同請求,都需要重新響應請求。

所以,為了解決客户端和服務端保持會話連接,通過 cookie 和 session 來記錄 http 狀態。

HTTP 的其他特點是簡單快速,只需傳送方法和路徑就可以向服務端進行請求;還有支持傳輸任意類型的數據對象。

HTTPS

基礎

https 是 http 的“升級”版本:

HTTPS = HTTP+ SSL/TLS

SSL 是安全層,TLS 是傳輸層安全,是SSL 的繼承。使用SSL或TLS 可確保傳輸數據的安全性。

使用 HTTP 可能看到傳輸數據是: “這是明文信息”

使用 HTTPS 可能看到: “283hd9saj9cdsncihquhs99ndso”

HTTPS 傳輸的不再是文本,而是二進制流,使得傳輸更高效,且加密處理更加安全。

HTTPS 的工作流程

1、客户端請求 HTTPS 請求並連接到服務器的 443 端口,此過程和請求 HTTP 請求一樣,進行三次握手;

2、服務端向客户端發送數字證書,其中包含公鑰、證書頒發者、到期日期

現比較流行的加解密碼對,即公鑰和私鑰。公鑰用於加密,私鑰用於解密。所以服務端會保留私鑰,然後發送公鑰給客户端。

3、客户端收到證書,會驗證證書的有效性。驗證通過後會生成一個隨機的 pre-master key。再將密鑰通過接收到的公鑰加密然後發送給服務端

4、服務端接收後使用私鑰進行解密得到 pre-master key

5、獲得 pre-master key 後,服務器和客户端可以使用主密鑰進行通信。

HTTP 與 HTTPS 區別

所以在回答 HTTP 與 HTTPS 的區別的問題,可以從下面幾個方面進行回答:

  • 加密: HTTPS 是 HTTP 協議的更加安全的版本,通過使用SSL/TLS進行加密傳輸的數據;
  • 連接方式: HTTP(三次握手)和 HTTPS (三次握手+數字證書)連接方式不一樣;
  • 端口: HTTP 默認的端口是 80和 HTTPS 默認端口是 443

HTTP2 是什麼?

HTTP/2 超文本傳輸協議第2版,是 HTTP/1.x 的擴展。所以 HTTP/2沒有改動HTTP的應用語義,仍然使用HTTP的請求方法、狀態碼和頭字段等規則。

它主要修改了HTTP的報文傳輸格式,通過引入二進制分幀層實現性能的提升。

現有很多主流瀏覽器的 HTTPS/2 的實現都是基於SSL/TLS的,所以基於 SSL/TLS 的 HTTP/2 連接建立過程和 HTTPS 差不多。在建立連接過程中會攜帶標識期望使用 HTTP/2 協議,服務端同樣方式迴應。