Вебсправочник
Основы веб-разработки

Vary: разделение вариантов ответа в HTTP-кеше

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

Назначение

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

Как это работает

Например, Vary:Accept-Encoding показывает зависимость представления от поддерживаемого сжатия. Кеш учитывает перечисленные значения при сопоставлении нового запроса с сохранённым ответом. Vary не устанавливает время хранения.

Пример

HTTP/1.1 200 OK
Content-Type: text/css
Content-Encoding: gzip
Vary: Accept-Encoding
Cache-Control: public, max-age=600

[Далее находится сжатое тело CSS]

Что должно получиться

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

Граница применения и частая ошибка

Не добавляйте все возможные заголовки в Vary: большое число комбинаций снижает пользу кеша. Vary:Cookie не заменяет private или no-store для персональных данных. Правила конкретного CDN могут ограничивать поддерживаемые варианты.

При сравнении CDN для статических файлов уточняйте поддержку Vary, состав ключа кеша и способ очистки. Название услуги не гарантирует, что нужный заголовок учитывается автоматически.

Самостоятельная проверка

Проверьте ответы своего сервера на два варианта Accept-Encoding. Сравните Content-Encoding, Vary и Cache-Control, затем повторите опыт через используемый кеш. Не используйте чужие персональные ответы для такой проверки.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.