Only part of the resource is returned.
When to use it
Answering a Range request, for video streaming or resumable downloads.
Good to know
Servers send 206 only when the client asks with a Range header, such as Range: bytes=0-1023, and the server supports ranges, advertised with Accept-Ranges: bytes. The response carries Content-Range: bytes 0-1023/146515 with the total size. Safari and iOS require range support for video: if your server ignores Range and returns 200, MP4 playback often fails outright.
Requests past the end of the file get 416. Several ranges in one request come back as multipart/byteranges. Ranges apply to the encoded bytes, so servers usually skip gzip for media. Behind a CDN, check that partial requests are cached and served correctly, not passed to the origin every time. Test with curl -r 0-99 -i, and resumable downloads with curl -C - -O.
Success (2xx)
2xx codes mean success: the server received, understood and accepted the request.
What it looks like
HTTP/1.1 206 Partial ContentHow to send it
| Node.js / Express | res.status(206).end() |
|---|---|
| Python / Flask | return '', 206 |
| nginx | return 206; |
How to check it
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/