HTTP Status Codes

HTTP 416 Range Not Satisfiable

416
LowWeb ServerReference page

Range Not Satisfiable — the server cannot fulfill the byte range specified in the request

416 is returned in response to a ranged request when the specified byte range does not overlap with the resource. The response includes a Content-Range header indicating the actual resource size. The standard also allows a server to refuse a request built from so many small, overlapping ranges that it amounts to a possible denial-of-service attempt. Clients cannot depend on 416, though: the Range header is optional for a server to honor, and many answer an unsatisfiable range with the full 200 response instead.

Visual summary

A quick reference view of how HTTP 416 works: A target bracket or pointer aiming at empty space past the end of a document.

HTTP 416 visual summary showing a target bracket or pointer aiming at empty space past the end of a document.
Visual summary: 416 means the client requested a portion of a file that lies beyond the file's actual length.

What 416 Means

The shortest useful reading of this status code.

Range Not Satisfiable means the server cannot fulfill the byte range specified in the request.

This status falls into the 4xx class, indicating a client-side error outcome for the request.

Quick read

Range Not Satisfiable

the server cannot fulfill the byte range specified in the request

How to fix 416

General informational guidance, not professional advice. Commands can affect your system or data — back up first and proceed at your own risk. FixerCode is an independent reference, not affiliated with any vendor mentioned.

  1. Read the real resource size

    The 416 response carries a Content-Range header in the form bytes */total. Use it to learn the current length before re-requesting.

    curl -sI -H 'Range: bytes=0-1' https://example.com/file
  2. Request a range within that size

    Ask only for bytes that exist. A resumed download must start from an offset below the actual file length.

  3. Clear a stale cached size

    If the file changed on the server, the client or CDN may still hold the old length. Clear that cache so the next request reads the current size.

  4. Serve ranges correctly if you own the server

    Make sure the origin returns Accept-Ranges and an accurate Content-Length so clients compute valid ranges.

Technical Context

How this status behaves without turning the page into a repair guide.

Standard usage

HTTP range requests allow clients to request specific byte ranges of a resource, enabling resumable downloads and adaptive streaming. When the range does not intersect with the resource, the server returns 416 with a Content-Range: bytes */total header.

Technical nuance

The Content-Range response header indicates the actual resource length, which the client can use to correct its range assumptions before re-requesting.

Implementation detail

Byte ranges are inclusive offsets that start at zero. A range spec is satisfiable only when it points inside the representation: its first position has to fall before the end of the resource, or it has to be a suffix range asking for a non-zero number of bytes. A resume request that starts exactly at the end of the file therefore satisfies nothing and earns a 416.

Architecture

Servers that serve large static files usually advertise Accept-Ranges: bytes so clients know seeking and resuming will work. On a zero-length resource, nothing but a non-zero suffix request can be satisfied, which is one more way an apparently reasonable request can come back 416.

Related HTTP Codes

Nearby HTTP status codes help clarify how 416 differs inside the same response family.

Common Causes

Range header value falls outside the actual size of the resource

A common condition that triggers a 416 response when the web server evaluates the transaction.

Client resuming a download with an incorrect byte offset after the resource changed

A common condition that triggers a 416 response when the web server evaluates the transaction.

Resource was truncated or replaced since the client last obtained its size

A common condition that triggers a 416 response when the web server evaluates the transaction.

Excessive numbers of small, overlapping ranges treated as a possible denial-of-service attempt

A common condition that triggers a 416 response when the web server evaluates the transaction.

Typical Scenarios

01

Video player requesting bytes beyond the end of a video file

02

Download manager resuming a file whose content has changed on the server

03

Partial-content client operating with a stale cached resource size

04

A resumable download client restarting at an offset that already equals the file's current size, leaving no bytes left to request

What To Know

A 416 error indicates a stale or incorrect byte range assumption on the client side, not a server problem. The server includes a Content-Range header in the response indicating the actual resource size.

Frequently Asked Questions

Common interpretation questions about HTTP 416.

The server includes a Content-Range header in the format 'bytes */total-size', indicating the actual resource length so the client can correct its range.

The client should read the Content-Range header in the 416 response to learn the actual total size of the resource, then either restart the download from the beginning or adjust the range request to fall within valid boundaries.

Yes. If a server generates a response dynamically and the client sends a Range header, the server may not know the final content length until generation is complete. If the generated content is smaller than the requested range, the server returns 416.

A resume client sends a range that starts at the offset it stopped, and on a complete download that offset equals the file length. A range whose first position is not smaller than the current length is unsatisfiable, so the server answers 416 with the real total in Content-Range — the signal that nothing is left to fetch.

Servers are free to ignore the Range header, and many implementations deliberately answer an unsatisfiable range with the complete representation in a 200 response, since clients are usually prepared to finish the task that way. A missing 416 does not mean the range was valid.

No. The resource exists at a known length — that length is what the Content-Range header reports. The problem is the requested window, not the file; a missing resource would return 404 instead.