http和websocket两者之间有什么区别
一句话总结:HTTP 是“你问我答”的请求-响应协议;WebSocket 是“电话接通后双方随时说话”的全双工长连接协议。WebSocket 建连时会借助 HTTP 握手,但握手完成后就不再走 HTTP 语义了。
| 维度 | HTTP | WebSocket |
|---|---|---|
| 通信模式 | 请求-响应 | 全双工 |
| 谁先发起 | 通常只能客户端发请求,服务器响应 | 连接建立后,客户端和服务器都可主动发消息 |
| 连接 | 短连接,或 Keep-Alive 复用;本质仍是一次次请求 | 一次握手后保持长连接 |
| 状态 | 协议本身无状态,靠 Cookie/Session 等维持 | 连接本身有状态 |
| 开销 | 每次请求通常带较多头部,开销较大 | 握手后用帧传输,帧头小,开销低 |
| 数据方向 | 半双工,请求和响应交替 | 双向同时收发 |
| URL | http:// / https:// |
ws:// / wss:// |
| 默认端口 | 80 / 443 | 也是 80 / 443,ws 默认 80,wss 默认 443 |
| 安全性 | HTTPS = HTTP over TLS | WSS = WebSocket over TLS |
| 典型场景 | 网页、REST API、文件上传下载、普通 CRUD | 聊天、在线游戏、协同编辑、股票行情、实时通知 |
建连过程:
WebSocket 先发一个 HTTP GET 请求,带上:
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: ...
Sec-WebSocket-Version: 13
服务器同意后返回 101 Switching Protocols,之后连接升级为 WebSocket,双方通过帧收发数据,支持文本、二进制、ping/pong、close 等。
关键区别理解:
- HTTP:客户端不请求,服务器一般不能主动推。
- WebSocket:连接建立后,服务器可以随时主动推消息。
- HTTP/2 虽然有多路复用,但仍然是请求-响应语义,不是 WebSocket 那种全双工。
- 如果只需要服务器单向推送,SSE 可能更简单;如果只是低频更新,HTTP 轮询也够用。
- WebSocket 不是替代 HTTP,而是补充:普通接口继续用 HTTP,实时双向通道用 WebSocket。
浙公网安备 33010602011771号