SSE、WebSocket 和 HTTP

文章目录

一、介绍

HTTP(超文本传输协议)

本质:无状态的请求-响应协议。

数据方向:仅限客户端主动拉取,服务器无法主动推送。

SSE(Server-Sent Events,服务器推送事件)

本质:基于HTTP的单向长连接推送技术。

工作方式:客户端通过 EventSource API 建立一个 HTTP 连接,服务器保持连接不关闭,并持续向客户端写入 text/event-stream 格式的数据流。

数据方向:仅服务器 → 客户端(单向),客户端发数据仍需另开普通 HTTP 请求。

WebSocket

本质:基于TCP的全双工通信协议,通过 HTTP 握手升级而来。

工作方式:先走HTTP Upgrade头协商切换协议,之后在单个 TCP 连接上双向收发消息帧(二进制或文本)。

数据方向:双向,客户端和服务器可随时互相发送数据。

二、区别

核心区别是

SSE 单向通讯, 具有持续性
WebSocket 双向通讯, 具有持续性
HTTP 一次性通讯, 无持续性

下面是一些具体细节

维度 HTTP SSE WebSocket
通信方向 单向(请求→响应) 单向(服务器→客户端) 双向全双工
协议基础 HTTP/1.1, HTTP/2, HTTP/3 纯 HTTP (Content-Type: text/event-stream) TCP 长连,WS/WSS 独立协议
连接维持 短连接(可复用) 长连接(浏览器自动重连) 长连接(需代码处理重连)
消息格式 任意(JSON/HTML/文件) 纯文本流(带 data: 前缀) 帧(文本/二进制)
服务端推送 ❌ 不支持 ✅ 支持 ✅ 支持
客户端上传 ✅ 支持(默认行为) ❌ 不支持(需另发 HTTP) ✅ 支持(原生高效)
浏览器兼容性 100% IE/旧 Edge 不支持,现代全支持 IE10+,现代全支持
防火墙/代理友好 极好 较好(基于 HTTP 标准头) 略差(部分老旧代理可能阻断 Upgrade)

三、使用场景

方式 场景
HTTP 获取静态资源、提交表单
SSE AI对话流式输出(打字机效果------这是SSE的经典强项)、股票行情实时刷新(只需推价格变化)、社交媒体通知流(点赞、评论数更新)、大型文件上传处理进度条(服务器告知处理到 80% 了)
WebSocket 多人在线文档、客服聊天、棋牌对战
相关推荐
万联WANFLOW5 小时前
异地组网速度忽快忽慢到底怎么回事?直连与中继的判断方法和处理步骤
运维·网络·网络协议·p2p
步行cgn7 小时前
HTTP 请求报文结构详解:请求行、请求头、请求体各自的作用
网络·网络协议·http
OpenLoong 开源社区10 小时前
打破 NAT 限制,零侵入跨网络通信:基于 WebRTC 的透明 TCP 隧道跨网络通信方案
网络协议·tcp/ip·开源·webrtc·openloong开源社区
从琳开始98910 小时前
从Socket到UDP回显服务器:Java网络编程完整指南
java·网络·网络协议·udp·java-ee
明天也要努力学习20 小时前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
cpolar技术支持1 天前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
Tel199253080041 天前
温度湿度信号转WiFi/MQTT/Modbus TCP采集模块 无线传输
网络·网络协议·tcp/ip·工业自动化·工控设备
web打印社区1 天前
Chrome-kiosk-printing能上生产吗
开发语言·前端·javascript·chrome·websocket
lazy H1 天前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408
低慢小uav1 天前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发