event-source-polyfill 可解决 ie 等老旧浏览器不支持 eventsource 的问题,自动降级为长轮询或 xmlhttprequest 模拟 sse;支持自定义请求头、凭证及心跳超时配置,需配合开发代理与跨域设置,并注意 ie 兼容性及错误兜底处理。

直接用 event-source-polyfill 就能解决老旧浏览器(比如 IE)不支持 EventSource 的问题,核心是它会自动降级为长轮询或 XMLHttpRequest 模拟 SSE 行为,而不是依赖原生 API。
安装和基础接入
通过 npm 安装后,在项目入口或需要使用 SSE 的模块顶部引入即可:
- 运行
npm install event-source-polyfill - 在代码最上方加
import 'event-source-polyfill';(全局注入模式),或按需导入:import { EventSourcePolyfill } from 'event-source-polyfill'; - 引入后,原生
EventSource存在时直接使用;不存在时,polyfill 会自动接管,无需改业务逻辑
处理自定义请求头和凭证
原生 EventSource 不支持设置请求头,但 polyfill 支持。关键参数要显式传入:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
headers对象可携带Authorization、Content-Type等字段 -
withCredentials: true才能发送 Cookie 或认证凭据 -
heartbeatTimeout建议设大些(如18000000),避免长连接被中间代理断开
注意跨域和开发环境代理
SSE 同样受 CORS 限制,但开发阶段不能只靠后端配 Access-Control-Allow-Origin:
- Vite 或 Webpack 的 proxy 配置可把
/api/sse/xxx代理到后端,绕过浏览器跨域检查 - 该方式仅限开发环境,上线后必须由后端正确返回
Access-Control-Allow-Credentials: true和对应 Origin - IE 下若走代理仍失败,需确认代理是否保留了
Transfer-Encoding: chunked,否则流式响应会中断
兼容性兜底与错误管理
polyfill 虽能模拟,但行为和原生仍有差异,需主动适配:
- 监听
error事件时,不要依赖event.target.readyState判断状态,而是结合重连逻辑 - 手动调用
eventSource.close()后,记得清除所有addEventListener,避免内存泄漏 - IE 中 polyfill 可能触发多次
onopen,建议加标志位防重复初始化
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










