HTTP / RFC 9110: HTTP Semantics 13.1.5. If-Range

http rfc9110 http semantics if range
10 November 2024

When we discuss the If-Range in the HTTP protocol, it's crucial to understand that this is a condition that is utilized by clients to inform servers under specific conditions regarding the content of a resource. For example, when a user is downloading a large file and their connection drops, If-Range allows the download to resume from the point where it stopped.

This condition is often used along with the Range. If a condition specified in If-Range is met, the server sends only the specified range; otherwise, the entire resource is sent. This condition could be based on a Last-Modified date or an ETag value.

It's essential to look at the structure of If-Range. This condition is used when the client wants to receive parts of the content only if it hasn't changed since the previous retrieval. In other words, if the content on the server hasn’t changed, only the parts that haven't been downloaded yet will be received.

You might wonder why such a thing is needed, but it optimizes bandwidth usage and improves user experience, especially for users dealing with unstable or limited connections. Imagine that you only want to change some data that already exists in a file, this request is precisely what If-Range provides.

Similarly, the server's approach for handling If-Range is typically contingent on whether some values like ETag are not present in the range, depending on server configurations defined in RFC 9110. Proper implementation of If-Range can help avoid redundant access and unnecessary use of bandwidth.

GET /file.zip HTTP/1.1
Host: www.example.com
If-Range: "123456789"
Range: bytes=1000-2000

Here is an example of an HTTP request to retrieve the file file.zip.
GET /file.zip HTTP/1.1: This line indicates the HTTP request to fetch the resource.
Host: www.example.com: Specifies which server the request is targeting.
If-Range: "123456789": This condition states if the ETag of the file has not changed, the request for Range should be executed.
Range: bytes=1000-2000: This asks for bytes 1000 to 2000 of the file only.

FAQ

?

How does the If-Range header work?

?

Why should I use If-Range?

?

Is If-Range always used with Range?