案例库 · 软件与 IT · 技术决策 · 2008-2011
WebSocket 利用 80 和 443 端口上的 HTTP 握手,打造全双工通道
WebSocket 复用了 80 和 443 端口上的 HTTP 升级握手,让实时流量能穿过现有防火墙。
IETF · WHATWG
那一手
多年来,网页想要获取实时数据,只能靠长轮询假装,反复打开和关闭 HTTP 请求。Flash 和 Comet 通道虽然能用,但笨重又脆弱。理论上,解决之道是新建一个专用端口和协议,可这恰恰是多数企业防火墙封锁的对象。
WebSocket 反其道而行,复用大家早已放行的端口。它利用 HTTP Upgrade 报头完成握手,一旦服务器返回 101,同一 TCP 连接便切换为全双工消息通道。对任何代理来说,它最初只是普通 HTTP 请求,随后才变成别的东西。
由于它依托现有端口和浏览器的源安全模型,无需改动任何基础设施。浏览器一支持,标准于 2011 年定稿,实时 Web 应用从此轻松部署。
为什么管用
- 复用 80 和 443 端口,WebSocket 能溜过那些封锁未知端口的防火墙,部署立等可取。
- 升级握手让连接在中介眼中是普通 HTTP 请求,代理安然无恙。
- 它用一条常开连接取代长轮询和 Flash,大幅降低每条消息的开销。
- 它沿用基于源的安全模型,不可信代码无法随意打开任意套接字。
值了多少借用 HTTP 端口,升级该连接。聪明
可以搬走什么
一个能穿过所有防火墙的平台和端口,比技术上更干净但需硬闯的新协议,更易获得接纳。
后来呢
RFC 6455 于 2011 年 12 月定稿,成为聊天、游戏、金融行情和协作工具的实时传输标准。后来,HTTP/2 和 HTTP/3 的多路复用以及 WebTransport 给它带来压力,但它仍是浏览器维持开放双向套接字的标准方式。
资料来源
发现哪里写错了?告诉我们。