HTTPQUERY
Français

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