response.body is a ReadableStream. You can pipe it to TextDecoderStream or read it chunk-by-chunk with a reader to handle large or streaming responses.
Server-sent JSON lines, log tails, and SSE-like streams work today without WebSockets. Just keep an eye on backpressure — slow consumers can pause the stream.
Combine with AbortController to cancel mid-stream. Most modern browsers fully support this; in older environments fall back to polling.