HTTP 和 WebSocket 是两种不同的网络通信协议,核心区别在于通信方向、连接状态和适用场景。
1. 通信方向:单向 vs 全双工
HTTP:单向请求-响应模式。
只能由客户端主动发起请求(比如打开网页、点按钮查数据),服务器收到请求后返回响应,之后连接就关闭了(HTTP/1.1 虽然支持长连接,但还是“你问我答”的模式)。
例子:你去奶茶店点单(客户端请求),店员做奶茶后给你(服务器响应),之后店员等你下次再来(连接关闭)。WebSocket:全双工双向通信。
连接建立后,客户端和服务器可以随时互相发消息,不需要一方先发起请求。就像两个人开着视频通话,你说一句,我说一句,不用每次都“喂,听得到吗?”。
例子:你和朋友开微信语音,你能随时说话,朋友也能随时插话,不用等对方先开口。
2. 连接状态:无状态 vs 长连接
HTTP:无状态。
每次请求都是独立的,服务器不记得“你是谁”(除非用 Cookie/Token 手动记录)。比如你登录后刷新页面,服务器需要重新验证你的身份。
例子:你去超市买东西,每次结账都要出示会员卡(Token),店员不会记住你之前买过什么。WebSocket:长连接。
一旦连接建立(握手阶段),双方保持“在线”状态,直到一方主动关闭。服务器能记住客户端的身份(比如通过 Token 鉴权),适合需要持续交互的场景。
例子:你在家开空调,用手机 APP 远程控制,APP 和空调服务器保持长连接,你能随时查看温度、调整模式,不用每次操作都重新连接。
3. 协议层级与握手方式
HTTP:基于 TCP 的应用层协议,直接使用 TCP 连接。
每次请求都要携带完整的 HTTP 头部(比如Host
、Cookie
、User-Agent
),冗余信息多,适合“一次性”数据传输。WebSocket:基于 TCP 的应用层协议,但通过 HTTP 握手升级。
连接建立时,客户端先发一个 HTTP 请求(Upgrade: websocket
),服务器同意后,双方切换为 WebSocket 协议,之后的通信用更小的帧头(仅 2-10 字节),效率更高。
4. 适用场景
HTTP 适合:
传统的“客户端发起请求,服务器返回结果”的场景,比如:刷网页(加载 HTML/CSS/JS);
调用 API 查数据(比如查天气、查订单);
提交表单(登录、下单)。
WebSocket 适合:
需要实时双向交互的场景,比如:聊天软件(消息实时推送);
监控看板(服务器状态实时更新);
远程控制(比如你项目中用 WebSocket 实现的 SSH 终端,打字、回显实时同步);
股票行情(股价变动秒级推送)。
总结对比表
在运维监控系统里用 WebSocket 实现 SSH 远程控制,就是典型的“需要实时双向交互”的场景——用户在网页敲命令,服务器实时返回执行结果,这用 HTTP 的“请求-响应”模式根本做不到(每次发命令都要等服务器响应,无法实时显示输入的字符)。所以选 WebSocket 是因为它的全双工特性,能保证操作和反馈的实时性。