WebSocket

云云​(留言 | 貢獻)2026年7月22日 (三) 03:54的修訂 (创建页面,内容为“ {{Infobox | 标题 = WebSocket | 内容 = {{!}}- ! 类型 {{!}} 网络通信协议 {{!}}- ! 标准 {{!}} RFC 6455(IETF) {{!}}- ! 首次提出 {{!}} 2008年 {{!}}- ! 标准化时间 {{!}} 2011年12月 {{!}}- ! 传输层 {{!}} TCP {{!}}- ! 设计目标 {{!}} 全双工、低延迟实时通信 {{!}}- ! 相关标准 {{!}} RFC 7692、RFC 8441、RFC 9220 }} '''WebSocket'''是一种标准化的网络通信协议,由IETF于2011年12月以RFC 6455正式发布为…”)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

WebSocket是一種標準化的網絡通信協議,由IETF於2011年12月以RFC 6455正式發布為互聯網標準(STD 34)。[1] 該協議在單個TCP連接上提供全雙工通信通道,允許客戶端與服務器之間建立持久連接並進行雙向、低延遲的數據交換。[2] 與HTTP的請求-響應模型不同,WebSocket在初始握手完成後,連接保持打開狀態,任何一方均可隨時發送消息,無需重複建立連接。[3]

歷史

WebSocket的概念誕生於2008年,由Michael Carter牽頭發起技術討論,旨在解決當時瀏覽器端實時通信依賴Comet技術(輪詢與長輪詢)所帶來的效率低下與實現複雜等問題。[4] 隨後,Ian Hickson與Michael Carter合作確定了"WebSocket"這一名稱,並將其納入HTML5規範草案中。[4] 協議最初以"TCPConnection"為名,作為基於TCP的套接字API占位方案出現。[5]

2009年,Google Chrome 4成為首個完整支持WebSocket協議的瀏覽器。[4] 2010年,該協議獲得主流瀏覽器的廣泛採納。2011年12月,IETF正式發布RFC 6455,將WebSocket協議標準化,定義了握手過程、數據幀格式、關閉握手及安全考量等內容。[1] 此後,WebSocket擴展標準陸續出台:RFC 7692定義了基於deflate算法的逐消息壓縮機制;RFC 8441增加了通過HTTP/2引導WebSocket的能力;RFC 9220進一步將其擴展至HTTP/3。[1] WebSocket API現由WHATWG HTML Living Standard定義,全球主流瀏覽器支持率超過99%。[1]

技術特性

握手與連接升級

WebSocket連接始於一個HTTP升級請求。客戶端發送包含Upgrade: websocket及Connection: Upgrade頭部的HTTP請求,服務器返回101 Switching Protocols狀態碼後,TCP連接即從HTTP協議切換至WebSocket協議。[6] 握手過程中包含Sec-WebSocket-Key與Sec-WebSocket-Accept字段,用於防止跨協議攻擊與緩存投毒。[6] 此設計使WebSocket能夠復用80與443端口,兼容現有HTTP基礎設施如防火牆、代理與負載均衡器。[2]

數據幀與傳輸效率

握手完成後,通信轉為輕量級的WebSocket幀格式,而非完整的HTTP消息。[2] 幀頭部開銷極小,支持文本(UTF-8)與二進制數據載荷,並可通過分片機制處理大消息。[3] 控制幀用於ping、pong及連接關閉操作,使應用層可實現心跳檢測與斷連感知。[2] 相比HTTP輪詢每次請求均附帶完整頭部,WebSocket在持續通信場景下顯著降低了帶寬消耗與協議開銷。[3]

全雙工與服務器推送

WebSocket的核心優勢在於全雙工通信能力。連接建立後,客戶端與服務器均可獨立發送消息,無需等待對方請求。[3] 服務器可在事件發生的瞬間主動向客戶端推送數據,消除了輪詢模式下的固有延遲。[2] 這一特性使WebSocket成為實時應用的基礎設施,涵蓋即時通訊、在線協作、實時數據儀錶盤及多人遊戲等場景。[7]

與HTTP輪詢的比較

在WebSocket出現之前,瀏覽器端實時通信主要依賴HTTP輪詢(Polling)與長輪詢(Long Polling)。[2] 輪詢模式下,客戶端以固定間隔重複發送HTTP請求檢查更新,即使無新數據也會產生大量冗餘請求與帶寬浪費。[3] 長輪詢通過保持請求打開直至數據可用略有改善,但仍需反覆建立連接,並受代理超時限制。[7]

WebSocket通過持久化單一連接解決了上述問題:無需重複TCP握手與TLS協商,消息僅在數據實際產生時傳輸,服務器負載與實際使用量而非輪詢頻率成正比。[2] 在延遲方面,輪詢的平均延遲約為輪詢間隔的一半,而WebSocket可將延遲降至網絡傳播與處理時間決定的亞百毫秒級別。[3] 在擴展性方面,大規模輪詢系統因空請求泛濫而難以承受高並發;WebSocket雖需維護長連接狀態,但消息驅動的負載模式使其在同等用戶規模下資源利用更為高效。[7]

擴展標準

壓縮擴展

RFC 7692定義了WebSocket的per-message deflate擴展,允許對單個消息應用deflate壓縮算法,減少文本類數據的傳輸體積。[1] 該擴展在握手階段通過Sec-WebSocket-Extensions頭部協商啟用。

HTTP/2與HTTP/3引導

傳統WebSocket通過HTTP/1.1升級握手建立。RFC 8441引入了通過HTTP/2流引導WebSocket連接的機制,使WebSocket可在HTTP/2多路復用環境中運行。[1] RFC 9220進一步將該機制擴展至基於QUIC的HTTP/3,為WebSocket在現代化傳輸協議上的部署提供了標準化路徑。[1]

應用領域

WebSocket已成為實時Web應用的基礎協議。在金融領域,它被用於股票行情推送與交易平台;在協作軟件中,支持文檔協同編輯與光標同步;在物聯網與車聯網場景中,為設備狀態監控與充電基礎設施提供低延遲通信通道。[4] 此外,在線遊戲、社交媒體動態流、直播彈幕系統及客戶服務聊天窗口等均廣泛採用WebSocket實現即時交互。[7]

參考文獻