HTTP 206 Partial Content
HTTP 206 Partial Content is the response to a successful range request. The client sent a Range header specifying which bytes of a resource it wants, and the server is returning exactly that portion. 206 is the foundation of video streaming, resumable downloads, and parallel chunk-based file transfers.
Quick reference
| Code | 206 |
|---|---|
| Name | Partial Content |
| Category | 2xx Success |
| Specification | RFC 9110 §15.3.7 |
| IANA status | Assigned |
| Cacheable | Yes — cacheable by default |
| Client action | Use the Content-Range header to determine what portion of the resource was returned. |
| In-depth guide | HTTP 206 full guide → |
What HTTP 206 means
RFC 9110 defines 206 as indicating that the server is successfully fulfilling a range request for the target resource by transferring one or more parts of the selected representation. A 206 response must include a Content-Range header that describes which portion of the full resource is being returned.
Range requests use the Range request header to specify a byte range: Range: bytes=0-1023 requests the first 1024 bytes. If the server supports range requests, it returns the requested bytes with 206. If the range is invalid or the server does not support ranges, it returns the full resource with 200.
Before making a range request, check whether the server supports it by making a HEAD request or an initial GET and checking for the Accept-Ranges: bytes response header. Servers that do not support range requests will not include this header, and should return 200 for the full content instead of 206 for a range.
How range requests work
A basic range request and response:
GET /video.mp4 HTTP/1.1 Host: example.com Range: bytes=0-1048575 HTTP/1.1 206 Partial Content Content-Range: bytes 0-1048575/52428800 Content-Length: 1048576 Content-Type: video/mp4 Accept-Ranges: bytes [first 1MB of the video file]
The Content-Range header format is bytes <start>-<end>/<total>. In the example: bytes 0 through 1048575, out of a total file size of 52428800 bytes (50MB). The client knows it has the first 1MB of a 50MB file and can request subsequent ranges.
Common uses
Video streaming
HTML5 video players request video files in chunks using range requests. The browser requests the next few seconds of video ahead of the current playback position, using 206 responses to assemble the stream. Seeking in a video triggers a new range request starting at the byte offset corresponding to the seek position.
Resumable downloads
A download interrupted at byte 5,000,000 can be resumed by requesting Range: bytes=5000000-. The server returns 206 starting from that byte and the download continues where it left off without re-downloading the first 5MB.
Parallel chunk downloads
Download managers split a file into segments and request each segment in parallel with separate range requests. Each returns 206. The manager writes each chunk to the correct offset and assembles the complete file when all chunks arrive.
Multipart 206 responses
A single request can specify multiple ranges: Range: bytes=0-999, 5000-5999. The server returns a multipart response with Content-Type: multipart/byteranges and each range in a separate part with its own Content-Range header. Multipart range responses are rare in practice — most clients make separate requests for separate ranges.
FAQ
What does HTTP 206 Partial Content mean?
HTTP 206 means the server is returning a portion of the requested resource in response to a range request. The Content-Range header describes which bytes are included and the total size of the full resource.
Why do video players trigger 206 responses?
HTML5 video players use range requests to stream video in chunks rather than downloading the entire file before playback. 206 responses deliver each chunk as the player needs it, enabling immediate playback and seeking without downloading the full file.
What is the difference between 200 and 206?
200 returns the complete resource. 206 returns a specified byte range of the resource. A server that returns 200 in response to a range request is not supporting range requests — the client receives the full file and must extract the needed bytes.
What does Accept-Ranges: bytes mean?
It means the server supports byte-range requests and will return 206 for requests with a valid Range header. If this header is absent or set to none, the server does not support range requests.
Related resources
On this site: HTTP 206 Partial Content — full guide · HTTP 200 OK · HTTP 416 Range Not Satisfiable · All 2xx success codes
Standards: RFC 9110 §15.3.7 · IANA HTTP Status Code Registry · MDN Web Docs: 206