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