RSocket 學習(二):HTTP VS WebSocket VS RSocket 一. HTTP 的特性 二. WebSocket 的特性 三. RSocket 與這些協議的對比 參考資料

在比對 HTTP、WebSocket、RSocket 之前,我們先通過下面這張 OSI 七層模型的圖快速梳理一下網絡通信的面貌, 以便後續更好地理解它們。

一. HTTP 的特性

超文本傳輸協議(英語:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分佈式、協作式和超媒體信息系統的應用層協議。

HTTP 已經演化出了很多版本,它們中的大部分都是向下兼容的。在 RFC 2145 中描述了 HTTP 版本號的用法。客戶端在請求的開始告訴服務器它採用的協議版本號,而後者則在響應中採用相同或者更早的協議版本。

1.1 HTTP/0.9

已過時。只接受 GET 一種請求方法,沒有在通訊中指定版本號,且不支持請求頭。

1.2 HTTP/1.0

這是第一個在通訊中指定版本號的 HTTP 協議版本。

  • 協議版本信息現在會隨着每個請求發送(HTTP/1.0被追加到了GET行)。
  • 狀態碼會在響應開始時發送,使瀏覽器能瞭解請求執行成功或失敗,並相應調整行爲(如更新或使用本地緩存)。
  • 引入了 HTTP 頭的概念,無論是對於請求還是響應,允許傳輸元數據,使協議變得非常靈活,更具擴展性。
  • 在新 HTTP 頭的幫助下,具備了傳輸除純文本 HTML 文件以外其他類型文檔的能力。

1.3 HTTP/1.1

在1997年初,HTTP1.1 標準發佈,就在HTTP/1.0 發佈的幾個月後。

HTTP/1.1 默認採用持續連接(Connection: keep-alive),能很好地配合代理服務器工作。還支持以管道方式在同時發送多個請求,以便降低線路負載,提高傳輸速度。

HTTP/1.1 相較於 HTTP/1.0 協議的區別主要體現在:

  • 緩存處理
  • 帶寬優化及網絡連接的使用
  • 錯誤通知的管理
  • 消息在網絡中的發送
  • 互聯網地址的維護
  • 安全性及完整性

1.4 HTTP/2

HTTP/2 在 HTTP/1.1 有幾處基本的不同:

  • HTTP/2 是二進制協議而不是文本協議。不再可讀,也不可無障礙的手動創建,改善的優化技術現在可被實施。
  • 這是一個複用協議。並行的請求能在同一個鏈接中處理,移除了 HTTP/1.x 中順序和阻塞的約束。
  • 壓縮了headers。因爲headers在一系列請求中常常是相似的,其移除了重複和傳輸重複數據的成本。
  • 其允許服務器在客戶端緩存中填充數據,通過一個叫服務器推送(Server Push)的機制來提前請求。

1.5 HTTP/3

與其前任 HTTP/1.1 和 HTTP/2 不同,在 HTTP/3 中,將棄用 TCP 協議,改爲使用基於 UDP 協議的 QUIC 協議實現。

HTTP/3 的優點包括:

  • 基於 UDP 協議,所以連接時間更短。
  • 解決 HTTP/2 中存在的隊頭阻塞問題。HTTP/2 在單個 TCP 連接上使用了多路複用,受到 TCP 擁塞控制的影響,少量的丟包就可能導致整個 TCP 連接上的所有流被阻塞。在這種情況下,傳遞數據包的延遲會導致整個連接被延遲。
  • 能夠更好地檢測和修復數據包丟失。
  • 傳輸速度更快,加載時間更短並且連接更穩定

二. WebSocket 的特性

WebSocket 是一種網絡傳輸協議,可在單個TCP連接上進行全雙工通信,位於 OSI 模型的應用層。WebSocket 允許服務端主動向客戶端推送數據。在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就可以創建持久性的連接,並進行雙向數據傳輸。

WebSocket 與 HTTP 的不同之處:

  • WebSocket 提供全雙工通信,可以通過重用已建立的連接通道將數據從客戶端發送到服務器,或從服務器發送到客戶端。連接保持活動狀態,直到被客戶端或服務器終止。而 HTTP 提供半雙工通信。
  • WebSocket 的消息模式是雙向的,HTTP 的消息模式是 Request-Response 模式。
  • WebSocket 支持消息的 Push,HTTP 中不能直接使用 Push。
  • 如果使用加密的 WebSocket 連接,則在 WebSocket 安全連接中使用傳輸層安全性(TLS)可確保在將瀏覽器配置爲使用顯式代理服務器時發出 HTTP CONNECT 命令。這將在 WebSocket安全客戶端和 WebSocket 服務器之間建立一個隧道,該隧道通過 HTTP 代理提供低級別的端到端TCP通信。

三. RSocket 與這些協議的對比

3.1 與 HTTP/1.1 & HTTP/2 對比

  • HTTP 爲構建應用程序,需要在其之上定義應用程序語義。儘管 REST 普遍存在,但 REST 不足以定義應用程序語義。
  • HTTP 不支持應用層的流控制。HTTP/2 中加入了針對 HTTP Stream 的基於字節流窗口大小的 Flow Control。HTTP/2 的 Flow Control 只定義了 WINDOW_UPDATE 幀的格式和語義,並沒有規定接收方如何決定何時發送幀、發送什麼樣的值,也沒有規定發送方如何選擇發送包。RSocket 支持應用層 Flow Control,採取的並不是基於字節的網絡層流控,而是基於應用層幀數的流量控制。
  • HTTP 不支持雙向傳輸(HTTP/2 的 Server Push 並不是真正意義上的 Push),HTTP 需要服務端的推送必須要依賴 WebSocket。而 RSocket 建立長連接之後,任何一方都可以是 Requester 或 Responder。

3.2 與 TCP & QUIC 對比

  • 它們並沒有框架或應用程序語義。
  • 必須提供一個應用協議(例如 Netty 雖然簡化了 TCP 層的編程,但是需要自定義協議)

3.3 與 WebSocket 對比

  • WebSocket 沒有應用程序語義,只有框架。
  • 必須提供一個應用協議。

參考資料

  1. 超文本傳輸協議
  2. HTTP的發展
  3. HTTP/3
  4. WebSocket

該系列的相關文章:
RSocket 學習(一):初探

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