226 IM Used
Utilisation
Une réponse 226 IM Used indique au client que le corps contient une version modifiée de la ressource plutôt que la représentation complète. Un usage courant est l’encodage delta, où seules les différences entre la version mise en cache et la version actuelle sont transmises, ce qui économise de la bande passante.
Le serveur applique les manipulations d’instance pour lesquelles le client a déclaré une prise en charge via l’en-tête de requête A-IM. Les manipulations acceptées sont énumérées sur une seule ligne séparée par des virgules ou réparties sur plusieurs lignes.
Mise en cache
Une réponse 226 IM Used suit les règles de mise en cache delta définies dans sa propre spécification, et non la liste standard de mise en cache heuristique. La réponse est utilisable conjointement avec une instance de base mise en cache pour construire une entrée de cache correspondant à l’instance actuelle, et les directives Cache-Control standard s’appliquent toujours lorsqu’elles sont présentes.
L’instance actuelle non modifiée n’est pas toujours disponible directement. Reconstituer la ressource complète nécessite de combiner la réponse 226 avec une instance de base précédemment mise en cache, en se guidant sur les manipulations d’instance appliquées par le serveur.
Exemple
Le client part d’un cache vide et demande un fichier PDF. L’en-tête Accept-Encoding signale la prise en charge de la compression gzip. Le serveur répond avec le fichier complet encodé en gzip et un statut 200.
À la requête suivante, le client vérifie si le document a changé en envoyant la valeur d’ETag de la première réponse dans un en-tête If-None-Match. Le client déclare également la prise en charge de l’encodage delta vcdiff via l’en-tête A-IM.
Le serveur détecte que la ressource a changé depuis l’ETag d’origine et génère un fichier delta. Une ressource inchangée produit un 304 à la place. L’en-tête Delta-Base de la réponse identifie la version mise en cache par rapport à laquelle le delta est calculé. L’en-tête IM énumère les manipulations d’instance appliquées.
Requête
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
Accept-Encoding: gzip
Réponse
HTTP/1.1 200 OK
ETag: "1234-000"
Content-Encoding: gzip
<gzip-compressed file>
Requête (suivante)
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
If-None-Match: "1234-000"
Accept-Encoding: gzip
A-IM: vcdiff
Réponse (delta)
HTTP/1.1 226 IM Used
ETag: "1234-111"
Delta-Base: "1234-000"
Content-Encoding: gzip
IM: vcdiff
<gzip-compressed delta file>
Références de code
.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