Skip to content

使用 curl 建立 SSE(Server-Sent Events)连接,其实就是发起一个普通的 HTTP GET 请求,并保持连接不断开。SSE 的本质是服务端持续不断地向客户端推送文本流(Content-Type: text/event-stream)。

典型 curl 命令如下:

bash
curl -N http://MCP_SERVER地址/sse

参数说明:

  • -N--no-buffer:让 curl 立即输出服务端推送的每一行内容,不做缓冲(SSE 场景下很重要)。
  • http://MCP_SERVER地址/sse:替换为实际的 SSE 订阅地址(具体路径根据你的 MCP Server 配置而定)。

如果需要带认证头:

bash
curl -N -H "Authorization: Bearer <token>" http://MCP_SERVER地址/sse

连接建立后

  • 只要服务端有事件推送,curl 会实时输出到终端。
  • 你可以看到形如:
    event: notifications/tools/list_changed
    data: {"message":"工具列表已更新"}

注意:

  • curl 只能“看见”推送内容,不能主动发消息给服务端(SSE 是单向的)。
  • 如果你需要双向通信,请用 WebSocket。

SSE(Server-Sent Events)连接的请求头和普通的 HTTP POST/GET 请求相比,确实有一些区别,主要体现在以下几点:


1. SSE 连接的请求头

  • 最基本的 SSE 请求头(浏览器或 curl 默认):

    Accept: text/event-stream

    这个头告诉服务端,客户端希望接收 SSE 流。

  • 常见的完整请求头(部分服务端会校验):

    Accept: text/event-stream
    Cache-Control: no-cache
    Connection: keep-alive
  • 如果需要认证,还会加上认证头

    Authorization: Bearer <token>
  • curl 默认不会自动加 Accept: text/event-stream,但大多数服务端会自动识别 SSE 路径,也可以手动加上:

    bash
    curl -N -H "Accept: text/event-stream" http://MCP_SERVER地址/sse

2. 普通 HTTP POST/GET 请求头

  • 常见的 POST/GET 请求头
    Content-Type: application/json
    Accept: application/json
    • POST 请求还会有请求体(body),如调用 tools/call。

3. 总结对比

场景典型请求头说明
SSE 连接Accept: text/event-stream必须,表明是 SSE 客户端
Cache-Control: no-cache建议,防止缓存
Connection: keep-alive建议,保持长连接
Authorization: Bearer token(如需认证)可选,鉴权
普通 POSTContent-Type: application/json必须,表明是 JSON 请求体
Accept: application/json建议,期望返回 JSON
Authorization: Bearer token(如需认证)可选,鉴权

结论
SSE 连接和普通 HTTP 请求的请求头确实不同,最关键的是 SSE 需要 Accept: text/event-stream,而普通 API 请求通常用 Content-Type: application/json

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer