An SSE stream is an HTTP request that never ends. Every default you did not touch is working against it.
TL;DR: your SSE endpoint breaks twice before it reaches your logic. Once because the Connection header is illegal in HTTP/2. Once because your Go server's default timeouts cut the stream at 30 seconds. And if you stay on HTTP/1.1, a permanent stream freezes the rest of your page. In August 2026, Go patched a flaw where a timeout was not applied to HTTP/2 connections. Same lesson: a timeout only protects what it covers.
This article is for Go developers shipping streaming to production. SSE, WebSocket, long-poll: anything that stays open.
The setup
SSE stands for Server-Sent Events. It is a one-way HTTP stream. The server pushes messages, the browser listens.






