HTTPQUERY
Español

226 IM Used

Uso

Una respuesta 226 IM Used indica al cliente que el cuerpo contiene una versión modificada del recurso en lugar de la representación completa. Un uso habitual es la codificación delta (delta encoding), en la que solo se transmiten las diferencias entre la versión en caché y la versión actual, lo que ahorra ancho de banda.

El servidor aplica las manipulaciones de instancia (instance manipulations) cuyo soporte declaró el cliente mediante la cabecera de solicitud A-IM. Las manipulaciones aceptadas se enumeran en una sola línea separada por comas o repartidas en varias líneas.

Almacenamiento en caché

Una respuesta 226 IM Used sigue las reglas de caché delta definidas en su propia especificación, no la lista de almacenamiento heurístico en caché estándar. La respuesta puede utilizarse junto con una instancia base en caché para construir una entrada de caché de la instancia actual, y las directivas Cache-Control estándar siguen siendo aplicables cuando están presentes.

La instancia actual sin modificar no siempre está disponible de forma directa. Reconstruir el recurso completo requiere combinar la respuesta 226 con una instancia base previamente almacenada en caché, guiándose por las manipulaciones de instancia que aplicó el servidor.

Ejemplo

El cliente parte de una caché vacía y solicita un archivo PDF. La cabecera Accept-Encoding señala que admite la compresión gzip. El servidor responde con el archivo completo codificado con gzip y un estado 200.

En la siguiente solicitud, el cliente comprueba si el documento ha cambiado enviando el valor de ETag de la primera respuesta en una cabecera If-None-Match. El cliente también declara su compatibilidad con la codificación delta vcdiff mediante la cabecera A-IM.

El servidor detecta que el recurso ha cambiado desde el ETag original y genera un archivo delta. Un recurso sin cambios produce un 304 en su lugar. La cabecera Delta-Base de la respuesta identifica respecto a qué versión en caché se ha calculado el delta. La cabecera IM enumera las manipulaciones de instancia aplicadas.

Solicitud

GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
Accept-Encoding: gzip

Respuesta

HTTP/1.1 200 OK
ETag: "1234-000"
Content-Encoding: gzip

<gzip-compressed file>

Solicitud (posterior)

GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
If-None-Match: "1234-000"
Accept-Encoding: gzip
A-IM: vcdiff

Respuesta (delta)

HTTP/1.1 226 IM Used
ETag: "1234-111"
Delta-Base: "1234-000"
Content-Encoding: gzip
IM: vcdiff

<gzip-compressed delta file>

Referencias de código

.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