讲解 WebSocket 和 HTTP 两者的概念、工作方式、特点以及使用场景

365 阅读3分钟

🌐 1. HTTP 概述

HTTP(HyperText Transfer Protocol)

  • 是一种 基于请求-响应模式无状态 协议。
  • 客户端(通常是浏览器)发送请求,服务器处理后返回响应,然后连接关闭。
  • 每一次交互都要 重新建立连接(HTTP/1.x)。
  • HTTP/1.1 中支持 Keep-Alive,可在短时间内复用连接,但仍是 一次请求一次响应
  • 主要用于 静态/动态页面加载、API 请求 等。

特点:
✅ 简单、成熟、广泛支持
✅ 有中间代理、缓存、负载均衡等完善的配套生态
❌ 无法做到 服务器主动向客户端推送 数据
❌ 高频率交互需要不断发起新的 HTTP 请求,效率低下


🔗 2. WebSocket 概述

WebSocket

  • 是一种 全双工(Full-duplex) 、基于 TCP 的协议。
  • 设计初衷:解决浏览器和服务器之间实时、低延迟通讯的需求。
  • 先通过 HTTP(S) 发起一次握手(upgrade 请求),升级协议为 WebSocket。
  • 握手成功后,客户端和服务器之间会 保持长连接,可以双向自由传输数据,直到任意一方关闭连接。

特点:
✅ 一次连接后可持续通信,不需要反复建立/关闭连接
✅ 支持服务器主动向客户端推送消息
✅ 高效、低延迟、节省带宽开销(头部信息比 HTTP 小得多)
❌ 需要服务器和中间件支持 WebSocket 协议(代理、负载均衡需特殊配置)
❌ 连接数量过多时对服务器压力较大(需要合适的架构设计)


🔎 3. 工作方式对比

维度HTTPWebSocket
连接生命周期一次请求-响应后关闭长连接,持续通信
通信模式单向:客户端主动发起请求,服务器被动响应双向:客户端和服务器都能主动发消息
头部开销请求/响应有完整的 HTTP 头部,内容较大握手后头部极小,数据帧简单
实时性实时性差,需频繁发请求(轮询/长轮询)实时性强,消息可即时传达
适用场景页面加载、REST API、文件下载等聊天室、在线游戏、实时行情、直播弹幕等

📡 4. 连接过程

HTTP

  1. 客户端发送请求
  2. 服务器处理并返回响应
  3. 连接关闭(或保持短时连接)

WebSocket

  1. 客户端通过 HTTP(S) 发起带有 Upgrade: websocket 的握手请求:

    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: xxxxx
    Sec-WebSocket-Version: 13
    
  2. 服务器响应 101 Switching Protocols,协议升级完成:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: yyyyy
    
  3. 后续通过此 TCP 连接 自由收发二进制/文本数据帧


图片处理.png

🎯 5. 使用场景

🔵 HTTP:

  • 浏览器访问网页
  • RESTful API 调用
  • 文件上传/下载
  • 低频次交互

🟢 WebSocket:

  • 聊天应用(微信、Slack 等)
  • 实时股票/期货行情
  • 多人在线游戏状态同步
  • 实时协作(共享文档编辑)
  • 直播弹幕

🚦 6. 两者关系

  • WebSocket 并不是要“替代” HTTP,而是 补充
  • WebSocket 握手基于 HTTP 完成,因此必须依赖 HTTP/HTTPS 作为初始载体。
  • WebSocket 更适合 需要实时、低延迟 交互的场景,HTTP 更适合 一次性或低频次 的请求-响应场景。