If-Range
Verwendung
Clients verwenden If-Range, wenn sie einen unvollständigen Download fortsetzen oder einen bestimmten Byte-Bereich einer zuvor abgerufenen Ressource anfordern. Der Header trägt als Validator entweder einen ETag-Wert oder ein Last-Modified-Datum. Pro Anfrage ist nur eine der beiden Formen zulässig.
Der entscheidende Unterschied zu If-Match liegt darin, was geschieht, wenn die Bedingung nicht erfüllt ist. Ein Fehlschlag bei If-Match erzeugt den Fehler 412 Precondition Failed und bricht die Anfrage ab. Ein Fehlschlag bei If-Range verläuft hingegen glimpflich: Der Server ignoriert den Range-Header und gibt die gesamte Ressource mit dem Status 200 zurück. Das macht If-Range für die Fortsetzung von Downloads sicherer, weil der Client stets verwertbare Daten erhält.
Eine bedingte Anfrage mit If-Range setzt einen Range-Header in derselben Anfrage voraus. Ohne einen Range-Header ignoriert der Server If-Range vollständig.
entity-tag
Ein ETag-Wert, der zuvor vom Server empfangen wurde. Der Wert ist eine in Anführungszeichen gesetzte Zeichenkette und muss ein starker Validator sein: Schwache ETags mit dem Präfix W/ sind in If-Range nicht zulässig.
If-Range: "abc123"
HTTP-date
Ein Last-Modified-Zeitstempel im Standard-HTTP-Datumsformat. Der Server vergleicht dieses Datum mit dem aktuellen Änderungsdatum der Ressource.
If-Range: Wed, 01 Jun 2022 08:00:00 GMT
Hinweis
Ein If-Range-Header trägt entweder einen ETag oder ein Datum. Beide Formen zusammen sind in derselben Anfrage nicht zulässig.
Beispiel
Ein Client hat zuvor einen Teil einer großen Datei heruntergeladen und mit der ursprünglichen Antwort einen ETag erhalten. Um den Download ab Byte 1048576 fortzusetzen, sendet der Client sowohl den Range-Header als auch einen If-Range-Header mit dem gespeicherten ETag. Hat sich die Datei nicht geändert, antwortet der Server mit 206 Partial Content.
GET /releases/archive.tar.gz HTTP/1.1
Host: cdn.example.re
Range: bytes=1048576-
If-Range: "a1b2c3d4e5"
Hat sich die Ressource seit dem ursprünglichen Download geändert, passt der ETag nicht mehr. Der Server verwirft den Range und antwortet mit der vollständigen Datei und dem Status 200.
HTTP/1.1 200 OK
Content-Length: 52428800
ETag: "f6g7h8i9j0"
Ein datumsbasierter Validator funktioniert auf dieselbe Weise. Diese Anfrage setzt einen Download nur dann fort, wenn die Datei seit dem angegebenen Zeitstempel nicht verändert wurde.
GET /data/export.csv HTTP/1.1
Host: api.example.re
Range: bytes=524288-
If-Range: Sat, 15 Feb 2025 12:00:00 GMT