HTTP 與 WebSocket
本文比較了 HTTP 和 WebSocket 協議,解釋了它們的關鍵差異、特點和理想的使用場景。為開發者提供了選擇合適協議用於其網路應用的重要見解,對比 HTTP 的請求-回應模型與 WebSocket 的即時、雙向通信能力。
整個數位世界的基礎是機器之間的通信。授權的客戶端發出請求,伺服器接收、解析並提供適當的回應。這是普通人對於數位通信的普遍理解。然而,幕後的工作是複雜而繁瑣的。
應用開發者需要做很多工作來確保這種客戶端-伺服器通信能夠正常運作。選擇合適的通信協議是這些任務之一。當開發者試圖選擇一個可行的通信協議時,HTTP 和 WebSocket 是他們會遇到的兩個常見概念。
弄清這兩者的異同、功能以及其他方面,對於根據實際需求選擇正確的選項至關重要。
介紹 HTTP
讓我們先來了解 HTTP。這可能是數位通信領域中最常用的協議。HTTP 的初始版本於 1989 年推出,功能和應用範圍有限。但很快就被改進和升級,以支持瀏覽器和伺服器之間的大規模通信。
HTTP 是一種單向協議,意味著在任何給定時間,通信中只有一方可以發送或接收信息。當客戶端向伺服器發送請求時,該請求以 HTTP 或 HTTPS 的形式發送,伺服器在接收到請求後向客戶端發送相應的、唯一的回應。每個 HTTP 或 HTTPS 請求都與伺服器建立一個新的連接,並在接收到回應後自動終止連接。
HTTP 的一些主要特點包括:
- 無狀態
- 可以基於面向連接的協議運作(如 SCTP 和 TCP)
- 信息以 ASCII 編碼
- HTTP 請求的主要組成部分包括 HTTP 版本(HTTP/1.1,HTTP/2,HTTP/3)、方法、HTTP 標頭、主機信息和消息
什麼是 WebSocket?
WebSocket 是一種可以實現客戶端和 伺服器之間即時雙向通信的通信協議。
WebSocket 是一種用於在網路應用程式中創建即時雙向通信通道的協議。不同於傳統的 HTTP 請求(通常一個請求對應一個回應),WebSocket 可以建立持久連接,使伺服器能夠即時向客戶端推送數據,同時也接收來自客戶端的數據。與傳統的輪詢相比,WebSocket 大大減少了網路流量和延遲,提高了數據傳輸的效率和速度。在開發即時網路應用和線上遊戲時尤為適合。
WebSocket 的一些主要特點包括:
- 基於保持開放的 TCP 連接,直到客戶端或伺服器發起終止請求
- 建立在 HTTP 協議之上,所有 WebSocket 請求皆透過標準 HTTP 協議發送,然後在伺服器端被識別為特定的標頭信息升級
- WebSocket 協議是基於幀(數據包)的,一個完整數據包可以分成多個幀,每個幀包含一部分數據和標頭信息
HTTP 和 WebSocket 之間的關係
從上述介紹中,我們可以看到 HTTP 和 WebSocket 協議都:
- 使用 TCP 協議進行數據傳輸
- 用於客戶端和伺服器之間的通信
我們可以通過下表更直觀地顯示 HTTP 和 WebSocket 之間的差異。
HTTP | WebSocket |
---|---|
每次請求建立新連接(除非使用 HTTP 長連接,如 HTTP/1.1 Keep-Alive),通信結束後關閉連接 | 成功初始握手後連接保持開放,除非主動關閉或發生錯誤 |
單向通信模式,客戶端發送請求,伺服器返回回應,每次新通信需要重新建立連接 | 雙向通信模式,建立連接後,客戶端和伺服器可以隨時發送數據,而無需重新建立連接 |
每次通信需要發送完整的請求和回應標 頭,因此對於頻繁的短消息通信來說開銷很大 | 一旦建立連接,數據傳輸較輕便,不需每次傳輸標頭信息,適合高頻、低延遲的通信需求 |
主要用於傳輸相對穩定的數據 | 主要用於傳輸即時數據 |
由於每次請求需重新建立連接並通過標頭等傳遞必要信息,帶寬使用效率和回應速度受到影響 | 連續連接消除了每次請求建立連接和必要信息的步驟,導致延遲降低,帶寬使用效率更高 |
頻繁請求影響性能 | 頻繁請求不影響性能 |
如何選擇使用哪種協議?
根據上一節 HTTP 和 WebSocket 優缺點的比較,我們可以從兩個不同的維度來評估使用場景:
- 數據變化是否迅速,以及業務是否依賴即時數據
- 是否涉及頻繁的雙向通信
例如,如果 Jack 想建立一個視頻聊天應用,每個用戶都需要接收來自聊天對象的即時視頻數據並將自己的視頻流數據傳輸給對方,那麼 WebSocket 是最好的選擇。
Logto 的管理控制台不需要頻繁獲取當前登入用戶的資源使用情況,因為資源僅在用戶修改配置時才改變狀態。它只需要在用戶對資源進行操作時及時重新獲取資源狀態。從這個角度來看,HTTP 非常適合用於 Logto 管理控制台的使用場景。 同樣地,對於大多數雲服務儀表板,可以選擇 HTTP 作為儀表板與伺服器之間的通信協議。