How does FastAPI handle streaming responses?

Answer

FastAPI supports streaming responses for sending large data incrementally. StreamingResponse: from fastapi.responses import StreamingResponse; async def generate(): for chunk in large_data: yield chunk; @app.get('/stream') async def stream(): return StreamingResponse(generate(), media_type='application/octet-stream'). For Server-Sent Events (SSE): async def event_generator(): while True: data = await get_update(); yield f'data: {json.dumps(data)}\n\n'; return StreamingResponse(event_generator(), media_type='text/event-stream', headers={'Cache-Control': 'no-cache'}). For streaming LLM responses: stream tokens from the model and yield them — the client sees words appearing as they are generated. File streaming: use FileResponse for files or StreamingResponse with a file iterator for large files to avoid loading into memory. Streaming is essential for progress feedback, live logs, and reducing time-to-first-byte for large responses.