> 技术文档 > HTTP Server-Sent Events (SSE) 协议的基础格式_sse协议格式

HTTP Server-Sent Events (SSE) 协议的基础格式_sse协议格式

以下是 HTTP Server-Sent Events (SSE) 协议的基础格式详解:

---

一、协议基础

SSE 是 HTML5 规范中定义的服务器到客户端的**单向通信协议**,特点:
- 基于 HTTP 长连接(`Content-Type: text/event-stream`)
- 使用纯文本格式传输数据
- 默认支持断线重连
- 浏览器原生支持(通过 `EventSource` API)

---

二、核心消息格式

每条消息由 **字段行** 和 **空行终止符** 组成:

```text
[field]: [value]\\n
[field]: [value]\\n
\\n
```

#### **1. 必需字段**
- **`data` 字段**  
  定义消息内容,可多行传输:
  ```text
  data: { \"status\": \"success\" }\\n
  data: Continued on next line\\n
  \\n
  ```
  客户端接收时会合并为完整数据:`{ \"status\": \"success\" }\\nContinued on next line`

#### **2. 可选字段**
- **`event` 字段**  
  定义事件类型(默认类型为 `message`):
  ```text
  event: status_update\\n
  data: 系统已启动\\n
  \\n
  ```

- **`id` 字段**  
  设置消息ID(用于断线重连时定位):
  ```text
  id: 42\\n
  data: 当前温度:23℃\\n
  \\n
  ```

- **`retry` 字段**  
  指定重连时间(毫秒):
  ```text
  retry: 3000\\n
  \\n
  ```

---

三、技术规范要点

1. **编码要求**  
   - 必须使用 UTF-8 编码
   - 换行符统一为 `\\n`(Unix风格)

2. **消息终止**  
   每个消息块必须由两个连续的换行符 `\\n\\n` 结束

3. **BOM处理**  
   禁止在数据流开头添加字节顺序标记(BOM)

4. **MIME类型**  
   响应头必须包含:
   ```http
   Content-Type: text/event-stream
   Cache-Control: no-cache
   Connection: keep-alive
   ```

---

四、完整示例

#### 服务器响应示例:
```text
HTTP/1.1 200 OK
Content-Type: text/event-stream
Transfer-Encoding: chunked

event: alert
data: {\"level\": \"critical\", \"msg\": \"CPU过载\"}

id: 101
data: 当前用户数:256
data: 在线设备数:89

retry: 10000

```

#### 客户端处理(JavaScript):
```javascript
const eventSource = new EventSource(\'/stream\');

eventSource.addEventListener(\'alert\', (e) => {
  console.log(JSON.parse(e.data)); 
});

eventSource.onmessage = (e) => {
  console.log(\'未命名事件:\', e.data);
};
```

---

五、特殊场景处理
1. **多行数据**  
   通过重复 `data:` 行实现:
   ```text
   data: {\\n
   data:   \"id\": 123,\\n
   data:   \"name\": \"示例\"\\n
   data: }\\n
   \\n
   ```

2. **注释行**  
   以 `:` 开头的行会被忽略:
   ```text
   : 这是心跳检测时间戳 1630000000\\n
   data: ping\\n
   \\n
   ```

3. **错误恢复**  
   当连接中断时,浏览器会自动尝试重连(遵循 `retry` 设定)

---

六、协议对比

| 特性               | SSE             | WebSocket         |
|--------------------|-----------------|-------------------|
| 通信方向           | 单向(服务端→客户端) | 双向              |
| 协议基础           | HTTP            | 独立协议 (ws/wss) |
| 数据格式           | 文本            | 二进制/文本       |
| 自动重连           | ✅              | ❌                |
| CORS处理           | 需要配置        | 需要配置          |

---

通过这种规范化的消息格式,SSE 实现了高效的服务器推送能力,适用于股票行情、实时日志、进度通知等场景。

---DEEPSEEK