Кратко

  • RFC 3229 расширил условный GET: клиент называет сохранённые инстанции через If-None-Match, предлагает преобразования в A-IM и может получить 226 с рецептом IM вместо полной копии.
  • В реконструкции три идентичности. Delta-Base называет старую базу, тело несёт разницу, а ETag ответа обозначает восстановленную текущую инстанцию, не байты дельты.
  • Новый статус служил барьером для старых кэшей. Игнорирование неизвестного поля могло привести к хранению дельты как целого ресурса; 226 делал смысловой разрыв заметным.

Условный запрос экономил всё или ничего

Если сохранённый ответ оставался актуальным, 304 Not Modified устранял повторную передачу. При любом изменении обычный путь снова отправлял полное значение.

Кэш был бинарным свидетелем: копия годится без изменений либо не уменьшает следующий ответ. Одна новая строка заставляла пересылать все старые.

Опубликованный в январе 2002 года RFC 3229 превратил старую копию в материал для восстановления. Сервер мог вычислить отличие от текущей инстанции и отправить только инструкции.

Расширение было необязательным, стремилось сократить средний ответ без лишней сетевой поездки и сосуществовать с неосведомлёнными HTTP/1.0 и HTTP/1.1. Не каждое изменение обязано давать выгодную дельту.

Дельта не была сжатием или диапазоном

Спецификация определяет инстанцию как значение 200 GET для выбранного варианта после content coding, но до манипуляции инстанции и transfer coding.

Сжатие обычно декодируется без старой копии. Дельте требуется конкретная база. Range выбирает координаты в одной текущей инстанции; дельта описывает переход между двумя. Они могут уменьшать число байтов, но требуют разных доказательств.

226 не является PATCH. Тело отвечает на GET и помогает восстановить текущее состояние у получателя, не меняя ресурс. RFC 3229 ограничивает определённый механизм ответами GET.

Разделение не позволяет слову «инкрементальный» скрыть различия происхождения.

Клиент доказывал исходную точку

If-None-Match перечисляет ETags старых инстанций, которыми клиент располагает. A-IM сообщает допустимые преобразования.

Если тег ещё актуален, достаточно 304. Если состояние изменилось, способный сервер выбирает предложенную базу и строит совместимую дельту. Без версии, алгоритма или пользы он возвращает 200.

Это предложение, не команда. Клиент управляет базами и форматами. Источник управляет историей, вычислением, выбором базы и полной копией.

«Разница» безопасна лишь после согласования, от какого состояния и каким действием она применяется.

Один ответ связывал три объекта

Старая база уже в кэше. Тело 226 содержит инструкции. Их применение создаёт текущую инстанцию.

Если предложено несколько тегов, Delta-Base указывает выбранный. ETag ответа именует результат. RFC подчёркивает: он не именует дельту, потому что дельта не самостоятельная инстанция.

Тело может быть верным, но бесполезным отдельно. Ему нужны точные база, преобразование и выходная идентичность.

Content-Length измеряет переданную дельту, а не восстановленную инстанцию. Смешение превращает экономию в кажущееся усечение.

Порядок преобразований принадлежал происхождению

Цепочка выбирает ресурс и вариант, применяет content coding, назначает ETag инстанции, выполняет delta или range и затем transfer coding.

Этапы нельзя менять местами. Delta затем range может отличаться от range затем delta. Сжатие как content coding участвует в идентичности инстанции; как поздняя манипуляция лежит на другом уровне.

A-IM и IM сохраняют порядок. Кэш не может помнить лишь множество названий и перестраивать их при повторном использовании. База, алгоритм, параметры и последовательность составляют рецепт.

Экономия верна, пока объяснение превращения байтов в представление остаётся рядом.

Новый 2xx остановил неосведомлённый кэш

Авторы не хотели добавлять статус, но установленная база сделала его необходимым.

HTTP обычно требует игнорировать неизвестные поля. Старый прокси мог проигнорировать IM, сохранить дельту и позже отдать её как полный ресурс. Совместимость расширения породила бы тихое повреждение.

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

Даже Vary: If-None-Match, A-IM не предотвращал как минимум один путь неверной валидации. Отличие следовало показать там, где старая логика не сведёт его к 200.

IM описывал рецепт, 226 запрещал предполагать целое

Дельта-ответ обязан использовать 226 и IM с применённым кодированием. Запрос должен принять манипуляцию через A-IM и предоставить базу через If-None-Match.

Статус означает, что GET выполнен одной или несколькими манипуляциями. Текущая инстанция иногда доступна только после объединения с прошлыми или будущими ответами.

226 не исключительно синоним дельты. Рамка допускает комбинации с range. IM хранит последовательность, 226 не даёт считать тело полной инстанцией.

Короткая фраза «IM Used» не заменяет структурированные поля реконструкции.

Способный кэш мог восстановить 200

Запретить всё хранение означало потерять выгоду. RFC различает незнающий кэш и кэш, соблюдающий полный контракт.

Способный кэш декодирует манипуляции, восстанавливает текущую инстанцию и хранит её как 200. Он может оставить range и хранить 206 либо сохранить сырой 226 по специальным правилам.

Сырое повторное использование требует совместимых манипуляций, параметров и порядка следующего запроса, а также свежести, базы и идентичности. Сохранённая дельта не становится отдельным вариантом.

Директива Cache-Control im обозначает границу: no-store останавливает обычные кэши, а понимающие 226, A-IM и IM следуют специальным правилам.

Хранение прошлого имело цену

Дельта полезна, пока существует база. Клиент может хранить несколько инстанций и предлагать несколько ETags. Источник с историей выбирает подходящую и указывает Delta-Base.

Но место и история конечны, сравнение кандидатов расходует CPU, память и I/O. Подсказка удержания не обещает вечного хранения.

Оптимизация меняет стимулы: старую копию оставляют не для показа, а ради будущей реконструкции. Источник хранит версии или предварительные дельты лишь когда ожидаемая экономия покрывает цену.

Возврат к 200 — часть оперативного контроля. Если дельта больше, медленнее или отсутствует, целое лучше.

Современные реестры сохраняют словарь

Реестр HTTP-статусов IANA связывает 226 IM Used с RFC 3229. Реестр полей HTTP IANA хранит A-IM, Delta-Base и IM как постоянные.

Регистрация не доказывает широкое применение. Она сохраняет связь символов с контрактом и не позволяет другой технике придать им несовместимый смысл.

История не в универсальной победе дельты, а в объёме идентичности, который HTTP пришлось сохранить, чтобы отправить меньше и получить правильное.

Копия возникала после реконструкции

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

Клиент доказывает базу, сервер выбирает её, IM фиксирует порядок, ETag именует выход, кэш понимает цепочку или отказывается превращать байты в документ.

Без происхождения дельта не эффективная истина, а короткая последовательность со скрытым допущением.

HTTP 226 сделал допущение явным: получатель не получал новую копию, а получал проверяемый способ создать её из старой, наличие которой он доказал.