Server-Sent Events lets the server push updates to the browser without WebSockets. The browser opens new EventSource('/stream'), the server keeps the connection open and writes data: ...\n\n per message, and the client receives them as onmessage events. Reconnect-on-disconnect is built into the browser API.
Use SSE when the data flow is server-to-client only. Live dashboards, AI streaming responses (GPT and Claude both stream tokens via SSE), notification pushes, long-running job progress all fit. When the client also needs to send messages, you want WebSockets.
The wire protocol is plain HTTP — every reverse-tunnel service handles it. Just turn off response buffering at any intermediate proxy (nginx: proxy_buffering off; for the SSE route).