HTTP 协议是不是双向?分版本说清楚

发布时间:2026/7/17 17:39:31
HTTP 协议是不是双向?分版本说清楚 目录1. HTTP/1.0、HTTP/1.1传统短连接 / 长连接2. HTTP/2基于二进制帧多路复用3. HTTP/3QUIC4. 真正基于 HTTP 实现全双工双向WebSocket总结一句话补充区分半双工 vs 全双工1. HTTP/1.0、HTTP/1.1传统短连接 / 长连接不是真正双向通信是「一问一答半双工」通信模型客户端主动发 Request → 服务器完整返回 Response一次请求结束。同一连接内必须等上一次响应全部发完才能发下一次请求不能同时收发。服务器不能主动推送消息给客户端只能被动应答。想实现服务端推送只能靠轮询、长轮询、Flash 等 hack 方案协议本身不支持双向。2. HTTP/2基于二进制帧多路复用支持同一连接并发双向数据流但依然是请求驱动单条 TCP 连接里可以同时并行多个流客户端发请求帧、服务器回响应帧交叉传输但底层逻辑还是客户端发起请求服务端响应新增Server Push服务端可主动推送资源给客户端但仅限配套静态资源不是通用双向实时消息。依然不能随意双向实时互发自定义业务消息。3. HTTP/3QUIC和 HTTP/2 逻辑一致只是底层换成 UDP多路复用更强同样不原生支持通用双向实时通信。4. 真正基于 HTTP 实现全双工双向WebSocketWebSocket 不是独立协议握手阶段基于 HTTP客户端先发一个特殊 HTTP 升级请求Upgrade: websocket服务端返回 101 Switching Protocols握手完成后TCP 连接升级为 WebSocket 全双工通道此时真正双向客户端、服务器随时可以主动发消息互不阻塞。总结一句话原生 HTTP1.x/ 2 / 3本身单向请求 - 响应模型非双向只有通过 HTTP 握手升级成 WebSocket 后才能实现完整双向实时通信。补充区分半双工 vs 全双工HTTP半双工同一通道同一时间只能单向传输WebSocket全双工收发可同时进行两端自由发消息。