Protocal - HTTP v.s. SSE

HTTP(Hypertext Transfer Protocol,超文本传输协议)和 SSE(Server-Sent Events,服务器发送事件)并不是完全对立的概念,SSE 是基于 HTTP 协议的一种 Web API,用于实现服务器到客户端的单向实时通信。下面从多个方面介绍它们的区别与联系:

通信方向

  • HTTP:通常是客户端发起请求,服务器响应请求,是一种典型的请求 - 响应模式。客户端在需要数据时向服务器发送请求,服务器处理请求并返回相应的数据,之后连接通常会关闭。例如,在浏览器中访问网页时,浏览器向服务器发送 HTTP 请求,服务器返回 HTML、CSS、JavaScript 等资源。
  • SSE:是服务器向客户端进行单向实时通信的技术。一旦客户端与服务器建立了 SSE 连接,服务器就可以在有新数据时主动向客户端发送更新,而无需客户端再次发起请求。比如,股票行情网站可以使用 SSE 技术,服务器实时将股票价格的变化推送给客户端。

连接特性

  • HTTP:传统的 HTTP 连接在每次请求完成后就会关闭,下一次请求需要重新建立连接。虽然 HTTP/1.1 引入了持久连接(Keep - Alive),可以在一定时间内复用连接,但本质上还是基于请求 - 响应的模式。HTTP/2 和 HTTP/3 进一步优化了连接效率,但仍然以客户端发起请求为主。
  • SSE:建立的是一个持久的 HTTP 连接,连接会一直保持打开状态,直到客户端主动关闭或者出现错误。服务器可以在这个连接上持续向客户端发送数据。

数据格式

  • HTTP:响应的数据格式可以多种多样,常见的有 HTML、JSON、XML 等。客户端需要根据响应头中的 Content - Type 字段来解析数据。例如,一个返回 JSON 数据的 HTTP 响应头可能包含 Content - Type: application/json
  • SSE:服务器发送的数据遵循特定的文本格式,每条消息由一行或多行键值对组成,以 data: 开头表示消息内容。消息之间用空行分隔。例如:
data: This is the first message
data: This is the second part of the first message

data: This is the second message

应用场景

  • HTTP:适用于大多数传统的 Web 应用场景,如网页浏览、文件下载、API 请求等。在这些场景中,客户端主动发起请求获取所需的数据。
  • SSE:更适合需要服务器实时推送数据的场景,如新闻实时更新、实时股价信息、在线聊天中的消息推送、实时监控数据展示等。

浏览器兼容性

  • HTTP:具有极高的浏览器兼容性,所有现代浏览器都支持 HTTP 协议,并且可以处理不同版本的 HTTP(如 HTTP/1.1、HTTP/2、HTTP/3)。
  • SSE:大多数现代浏览器都支持 SSE,但在一些旧版本的浏览器中可能不被支持。在使用 SSE 时,可能需要考虑提供备用方案。

posted on 2025-07-15 13:59  frank_cui  阅读(102)  评论(0)    收藏  举报

导航

levels of contents