HTTPQUERY
Русский

226 IM Used

Применение

Ответ 226 IM Used сообщает клиенту, что тело содержит изменённую версию ресурса, а не полное представление. Один из распространённых случаев применения — дельта-кодирование, при котором передаются только различия между кэшированной и текущей версиями, что экономит трафик.

Сервер применяет манипуляции над экземплярами (instance manipulations), поддержку которых клиент объявил через запросный заголовок A-IM. Принятые манипуляции перечисляются в одной строке через запятую либо в нескольких строках.

Кэширование

Ответ 226 IM Used подчиняется правилам дельта-кэширования, определённым в его собственной спецификации, а не стандартному эвристическому списку кэширования. Ответ пригоден для использования вместе с кэшированным базовым экземпляром для построения записи кэша текущего экземпляра; стандартные директивы Cache-Control продолжают действовать, когда они присутствуют.

Неизменённый текущий экземпляр не всегда доступен напрямую. Восстановление полного ресурса требует объединить ответ 226 с ранее закэшированным базовым экземпляром, руководствуясь манипуляциями над экземплярами, которые применил сервер.

Пример

Клиент начинает с пустым кэшем и запрашивает PDF-файл. Заголовок Accept-Encoding сигнализирует о поддержке сжатия gzip. Сервер отвечает полным файлом в кодировке gzip и статусом 200.

При следующем запросе клиент проверяет, изменился ли документ, отправляя значение ETag из первого ответа в заголовке If-None-Match. Клиент также объявляет поддержку дельта-кодирования vcdiff через заголовок A-IM.

Сервер обнаруживает, что ресурс изменился со времени исходного ETag, и формирует дельта-файл. Для неизменённого ресурса вместо этого возвращается 304. Заголовок Delta-Base в ответе указывает, относительно какой кэшированной версии вычислена дельта. Заголовок IM перечисляет применённые манипуляции над экземплярами.

Запрос

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

Ответ

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

<gzip-compressed file>

Запрос (последующий)

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

Ответ (дельта)

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

<gzip-compressed delta file>

Примеры кода

.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