226 IM Used
Verwendung
Eine 226-IM-Used-Antwort teilt dem Client mit, dass der Body eine veränderte Fassung der Ressource enthält und nicht die vollständige Repräsentation. Ein verbreiteter Anwendungsfall ist Delta-Encoding, bei dem nur die Unterschiede zwischen der zwischengespeicherten und der aktuellen Fassung übertragen werden, was Bandbreite einspart.
Der Server wendet die Instance Manipulations an, für die der Client über den A-IM-Anfrage-Header Unterstützung erklärt hat. Akzeptierte Manipulationen werden in einer einzelnen kommagetrennten Zeile oder über mehrere Zeilen hinweg aufgeführt.
Caching
Eine 226-IM-Used-Antwort folgt den Delta-Caching-Regeln, die in ihrer eigenen Spezifikation definiert sind, und nicht der üblichen Liste für heuristisches Caching. Die Antwort lässt sich zusammen mit einer zwischengespeicherten Basisinstanz verwenden, um einen Cache-Eintrag für die aktuelle Instanz zu erzeugen; vorhandene Cache-Control-Direktiven gelten dabei weiterhin.
Die unveränderte aktuelle Instanz ist nicht immer direkt verfügbar. Für die Rekonstruktion der vollständigen Ressource muss die 226-Antwort mit einer zuvor zwischengespeicherten Basisinstanz kombiniert werden, geleitet von den Instance Manipulations, die der Server angewendet hat.
Beispiel
Der Client startet mit einem leeren Cache und fordert eine PDF-Datei an. Der Accept-Encoding-Header signalisiert Unterstützung für gzip-Komprimierung. Der Server antwortet mit der vollständigen gzip-kodierten Datei und dem Status 200.
Bei der nächsten Anfrage prüft der Client, ob sich das Dokument geändert hat, indem er den ETag-Wert aus der ersten Antwort in einem If-None-Match-Header sendet. Zusätzlich erklärt der Client über den A-IM-Header Unterstützung für vcdiff-Delta-Encoding.
Der Server erkennt, dass sich die Ressource seit dem ursprünglichen ETag geändert hat, und erzeugt eine Delta-Datei. Eine unveränderte Ressource führt stattdessen zu einer 304. Der Delta-Base-Header in der Antwort gibt an, gegen welche zwischengespeicherte Fassung das Delta berechnet wurde. Der IM-Header listet die angewendeten Instance Manipulations auf.
Anfrage
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
Accept-Encoding: gzip
Antwort
HTTP/1.1 200 OK
ETag: "1234-000"
Content-Encoding: gzip
<gzip-compressed file>
Anfrage (nachfolgend)
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
If-None-Match: "1234-000"
Accept-Encoding: gzip
A-IM: vcdiff
Antwort (Delta)
HTTP/1.1 226 IM Used
ETag: "1234-111"
Delta-Base: "1234-000"
Content-Encoding: gzip
IM: vcdiff
<gzip-compressed delta file>
Code-Referenzen
.NET
HttpStatusCode.IMUsed
Rust
http::StatusCode::IM_USED
Rails
:im_used
Go
http.StatusIMUsed
Symfony
Response::HTTP_IM_USED
Python3.5+
http.HTTPStatus.IM_USED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_IM_USED
Angular
@angular/common/http/HttpStatusCode.ImUsed