StarView writes SSE through the Plug adapter. It does not set
Content-Encoding, negotiate Brotli, or install a compression middleware.
Compression may already be active in your HTTP server, reverse proxy or CDN.
Check the deployed response before adding another layer.
Check each response type and hostname
Check HTML, the fingerprinted JavaScript/CSS referenced by that HTML, and a read-only SSE endpoint. Tenant domains may take different paths through your infrastructure even when they share one Phoenix application.
curl -sS -o /dev/null -D - -H 'Accept-Encoding: br' https://example.com/
curl -sS -o /dev/null -D - -H 'Accept-Encoding: gzip' https://example.com/
curl -sS -o /dev/null -D - -H 'Accept-Encoding: zstd' https://example.com/
curl -sS -o /dev/null -D - -H 'Accept-Encoding: identity' https://example.com/
Look for Content-Encoding, Vary: Accept-Encoding, the response type and
cache policy. Measure the actual transferred bytes: an omitted
Content-Length on a streamed response does not mean the response is empty.
Never label an uncompressed body as compressed, and retain a fallback for
clients that do not advertise the preferred encoding.
Keep static assets efficient
Run your normal production asset build, minification and Phoenix digest task.
Serve fingerprinted assets with a long immutable cache policy, and enable the
matching Plug.Static precompressed-file options only for files your build
actually produces. Phoenix's Gzip output does not also create Brotli files.
A proxy or CDN can negotiate compression for assets without adding a Brotli dependency to StarView. Do not apply the static asset cache policy to authenticated HTML or event streams.
Preserve streaming latency
SSE must arrive while the connection remains open. Test several timed events through the complete production path; a small response that finishes quickly does not prove a persistent stream flushes promptly.
If compressing a stream, use a streaming compressor and flush after each event without ending the compression context. Watch for proxy buffering and minimum body-size thresholds that delay the first event. Also check clean disconnects and reconnect snapshots. Do not add unconditional Brotli encoding based only on an example from another language or adapter.
Caddy's reverse proxy
documents immediate flushing for text/event-stream, and its
encode directive
documents Gzip and Zstandard support. Verify the deployed Caddy version and
configuration rather than assuming the latest documentation matches it.
Cloudflare
can negotiate Brotli, Gzip and Zstandard for supported content types; ordinary
HTML compression is not evidence that text/event-stream uses the same path.
Choose compression based on measured bandwidth, CPU cost and event latency. A working Gzip or Zstandard setup may already provide most of the benefit.