Кратко

  • Элемент Cache-Status описывает, как добавивший его кэш обработал соответствующие запрос и ответ; параметры hit и fwd имеют определённый локальный смысл.
  • Кэши сами выбирают момент публикации поля, параметры необязательны, а раскрытие может быть ограничено, поэтому короткий список не доказывает отсутствие других кэшей или решений.

Рассмотрим заведомо гипотетический разбор инцидента. Ответ содержит Cache-Status: edge; hit. Панель рисует один зелёный блок, называет доставку одноуровневой и записывает, что вышестоящие системы не участвовали. Сам элемент может быть правдив: пограничный кэш удовлетворил этот запрос сохранённым ответом и не пересылал его дальше. Но сохранённый ответ мог быть получен при более раннем обмене от другого кэша ближе к источнику, который не добавил собственное поле. Текущий ответ сообщает, что сделал пограничный кэш сейчас, а не восстанавливает всю историю появления объекта.

RFC 9211 отводит Cache-Status точную, но ограниченную роль. Каждый элемент списка представляет кэш, обработавший запрос и решивший сообщить о себе. Если сохраняется несколько элементов, они располагаются от ближайшего к серверу-источнику к ближайшему к пользователю. Добавляющий свой элемент кэш должен сохранять уже существующие значения. Поэтому поле полезно для диагностики видимой части цепочки.

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

Параметры также описывают локальные факты. hit означает, что добавивший элемент кэш не пересылал этот запрос и получил ответ из своего хранилища. fwd означает пересылку в направлении источника с возможной причиной uri-miss, vary-miss, stale или request. Это ценные операционные данные, которые нельзя превращать в лишённый контекста цветовой индикатор.

Локальная правда не равна полной топологии. fwd-status сообщает статус от сервера следующего перехода, а им может оказаться другой посредник, не источник. Идентификатор кэша бывает названием продукта, именем узла, адресом или сгенерированной строкой. Необязательные детали зависят от реализации. Без конфигурации и точки наблюдения одинаковые метки не гарантируют одинаковой роли, а разные метки не доказывают независимость инфраструктуры.

Временные рамки тоже важны. Cache-Status описывает соответствующие запрос и ответ. Один hit не рассказывает, когда и через какую цепочку был получен сохранённый ответ. Он не доказывает, что источник никогда не запрашивался за всю историю объекта. Поле также не объясняет обработку соседнего запроса с другими директивами, учётными данными, значениями Vary или условиями свежести. По RFC 9111 такие решения принимаются для конкретного запроса.

Это различие защищает атрибуцию инцидентов. Видимое fwd=stale; fwd-status=304 подтверждает, что добавивший элемент кэш получил 304 от следующего узла. Само по себе оно не устанавливает, что этим узлом был источник, все кэши добавили свои элементы или такое же решение было принято в другой точке. Краткое поле может отражать короткий путь, политику раскрытия, ограничение реализации либо их сочетание.

Используйте квитанцию наблюдения за кэшами. Это предлагаемый здесь редакционный операционный контроль, а не объект протокола IETF. Сохраняйте исходные байты поля и связывайте их с запросом, ответом, точкой и временем наблюдения. Для каждого ожидаемого узла фиксируйте настройку отправки, соответствие идентификатора, раскрытые и скрытые параметры, след пересылки, идентификатор следующего узла и подтверждающие журналы. Пробел отмечайте как неизвестность, а не превращайте молчание в отсутствие.

Квитанция не заменяет Cache-Status, а удерживает его в пределах доказательной силы. Сообщённый hit остаётся свидетельством локального попадания. Сообщённая пересылка остаётся свидетельством действия данного кэша. Дополнительная запись отвечает на более широкий вопрос: какая часть цепочки могла отчитаться, какая отчиталась и какие независимые данные закрывают пробелы?

Источники