要让sse真正实时,需后端设置content-type、cache-control、connection和x-accel-buffering响应头,nginx配置proxy_buffering off和proxy_cache off,并注意前端eventsource的withcredentials与error重连。

SSE(Server-Sent Events)依赖持续的 HTTP 连接传输流式数据,一旦中间代理(如 Nginx)开启响应缓冲或缓存,就会把本该逐块推送的消息攒起来,等缓冲满或连接关闭才一次性吐给浏览器——这就导致前端 EventSource 看起来“卡顿”:文字不是逐字出现,而是成段蹦出来。
要让 EventSource 真正实时,关键不是前端改 JS,而是前后端协同配合代理配置,打破缓冲链路。以下是实际可落地的三步配置要点:
后端响应头必须显式禁用代理缓冲
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
Content-Type: text/event-stream(必需) -
Cache-Control: no-cache(防止被中间缓存截断) -
Connection: keep-alive(维持长连接) -
X-Accel-Buffering: no(Nginx 专属指令,强制关闭其响应缓冲)
Nginx location 配置需关闭代理级缓冲与缓存
在反向代理 SSE 接口的 location 块中,必须显式关闭两项默认开启的功能:-
proxy_buffering off;—— 禁用 Nginx 自身的响应体缓冲 -
proxy_cache off;—— 彻底禁用代理缓存(即使没配 cache_path,也要关) - 同时建议加:
proxy_http_version 1.1;和proxy_set_header Connection '';,避免 HTTP/1.0 兼容性问题导致连接提前关闭
前端 EventSource 初始化时注意兼容性细节
虽然 EventSource API 简单,但几个细节影响稳定性:- 不要省略
withCredentials: true(若需带 Cookie 认证) - 监听
error事件并做重连逻辑(网络抖动时自动恢复) - 避免在开发环境用 Vue CLI 代理——它的
compress: true默认会压缩流式响应,导致数据粘包;应直接访问后端或关闭代理压缩
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










