HTTPQUERY
Deutsch

If-Unmodified-Since

Verwendung

Clients nehmen If-Unmodified-Since auf, um sich davor zu schützen, Änderungen anderer zu überschreiben. Das häufigste Szenario ist eine HTTP-PUT- oder DELETE-Anfrage, bei der der Client Gewissheit benötigt, dass sich die Ressource weiterhin in dem zuvor beobachteten Zustand befindet. Hat ein anderer Client die Ressource nach dem im Header angegebenen Datum verändert, weist der Server die Anfrage mit einer Antwort 412 Precondition Failed zurück.

Damit wird das Problem der verlorenen Aktualisierung (lost update) adressiert. Zwei Clients rufen dieselbe Ressource ab, beide nehmen Bearbeitungen vor und beide senden Aktualisierungen. Ohne Vorbedingung überschreibt die zweite Aktualisierung die erste stillschweigend. Das Hinzufügen von If-Unmodified-Since zur zweiten Anfrage stellt sicher, dass der Server den Konflikt erkennt.

Der Headerwert verwendet das HTTP-Datumsformat. Der Server vergleicht dieses Datum mit dem Last-Modified-Zeitstempel der Ressource. Ist das Änderungsdatum der Ressource gleich dem Wert in If-Unmodified-Since oder liegt es davor, ist die Bedingung erfüllt und der Server setzt die Verarbeitung fort.

Für stärkere Konsistenzgarantien ist If-Match mit einem ETag-Wert vorzuziehen. ETags bieten Genauigkeit auf Byte-Ebene, während datumsbasierte Bedingungen eine Auflösung von einer Sekunde haben.

HTTP-date

Der Wert folgt dem Format IMF-fixdate. Das Datum steht für den spätesten zulässigen Änderungszeitpunkt der Ressource.

If-Unmodified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT

Beispiel

Ein Client hat ein Dokument am 15. Februar 2025 abgerufen und sendet nun eine Aktualisierung. Der Wert von If-Unmodified-Since entspricht dem Last-Modified-Datum aus der ursprünglichen Antwort. Hat sich das Dokument nach diesem Zeitstempel geändert, antwortet der Server mit 412 Precondition Failed.

PUT /docs/report.json HTTP/1.1
Host: api.example.re
Content-Type: application/json
If-Unmodified-Since: Sat, 15 Feb 2025 10:30:00 GMT

In Kombination mit einer Range-Anfrage für Teil-Uploads stellt If-Unmodified-Since sicher, dass sich die Basisressource zwischen den einzelnen Chunks nicht geändert hat.

PATCH /files/dataset.csv HTTP/1.1
Host: api.example.re
If-Unmodified-Since: Fri, 14 Feb 2025 08:00:00 GMT
Content-Range: bytes 0-1023/4096