EventSource 通过 URL 查询参数传递数据,支持字符串拼接(需 encodeURIComponent 编码)或 URL/URLSearchParams 构造(更安全);仅支持 GET 请求,无法设 headers,敏感信息不宜放 URL 中。

在 JavaScript 中使用 EventSource 建立 SSE(Server-Sent Events)连接时,URL 参数是直接拼接在请求 URL 后面的,就像普通 HTTP GET 请求一样。EventSource 本身不提供专门的参数设置方法,但你可以通过字符串拼接或 URL 构造函数安全地添加查询参数。
用字符串拼接方式传参(简单直接)
这是最常用的方式,适用于参数固定、内容可控的场景。注意手动编码参数值,避免特殊字符导致 URL 解析错误。
- 使用
encodeURIComponent()对每个参数值编码 - 用
?开头,多个参数用&连接 - 确保后端能正确解析这些查询参数
示例:
const url = `https://api.example.com/events?userId=${encodeURIComponent('123')}&token=${encodeURIComponent('abc-xyz')}`;const es = new EventSource(url);
用 URL 构造函数动态构建(更安全可靠)
当参数较多、或来自用户输入时,推荐用 URL 和 URLSearchParams,自动处理编码和拼接逻辑,不易出错。
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
URL实例支持修改searchParams - 所有键值对会自动 URI 编码
- 便于后续动态增删参数
示例:
const url = new URL('https://api.example.com/events');url.searchParams.set('userId', '123');
url.searchParams.set('type', 'notifications');
url.searchParams.set('since', '2024-01-01');
const es = new EventSource(url.toString());
注意 EventSource 不支持 POST 或自定义 headers
EventSource 只发起 GET 请求,且无法设置请求头(如 Authorization)。如果需要鉴权或复杂参数,只能靠 URL 查询参数或 Cookie(后端从 Cookie 或 URL 中提取)。
- 敏感信息(如 token)不宜明文放在 URL 中(可能被日志、代理记录)
- 若必须传敏感参数,建议改用 Fetch + ReadableStream 或 WebSocket
- 部分浏览器对 URL 长度有限制(通常 2000 字符左右),参数不宜过多过长
服务端接收参数的方式取决于后端框架
无论前端怎么传,后端需从请求的查询字符串中读取参数。例如:
- Node.js(Express):
req.query.userId - Python(Flask):
request.args.get('userId') - Java(Spring):
@RequestParam String userId
确保后端返回的响应头包含 Content-Type: text/event-stream,且保持连接不关闭。

















