cache-control
Заголовок является основным механизмом для сервера HTTP , чтобы сказать кэширующий прокси - сервера «свежесть» в ответ. (т.е. как / если долго хранить ответ в кеше)
В некоторых ситуациях cache-control
директив недостаточно. Здесь заархивировано обсуждение рабочей группы HTTP , описывающее страницу, которая изменяется только в зависимости от языка. Это не правильный вариант использования для изменяться заголовок, но контекст является ценным для нашей дискуссии. (Хотя я считаю, что заголовок Vary решит проблему в этом случае, есть способ лучше.) На этой странице:
Vary
строго для тех случаев, когда прокси-серверу безнадежно или слишком сложно воспроизвести то, что будет делать сервер.
Надуманный пример:
У вашего HTTP-сервера большая целевая страница. У вас есть две немного разные страницы с одним и тем же URL, в зависимости от того, был ли пользователь на них раньше. Вы различаете запросы и «количество посещений» пользователя на основе файлов cookie. Но - поскольку целевая страница вашего сервера настолько велика, вам нужно, чтобы промежуточные прокси кэшировали ответ, если это возможно.
Заголовки URL, Last-Modified и Cache-Control недостаточны для того, чтобы дать эту информацию кеширующему прокси, но если вы добавите Vary: Cookie
, механизм кеширования добавит заголовок Cookie в свои решения кеширования.
Наконец, для небольшого трафика динамические веб-сайты - я всегда находил простое Cache-Control: no-cache, no-store
и Pragma: no-cache
достаточное.
Изменить - чтобы более точно ответить на ваш вопрос: заголовок HTTP-запроса «Принять» определяет типы содержимого, которые может обрабатывать клиент. Если у вас есть две копии одного и того же контента по одному и тому же URL-адресу, различающиеся только Content-Type, тогда использование Vary: Accept
может быть подходящим.
Обновление 11 сентября 12:
Я включаю пару ссылок, которые появились в комментариях с момента первоначальной публикации этого комментария. Оба они являются отличными ресурсами для реальных примеров (и проблем) с Vary: Accept; Если вы читаете этот ответ, вам также необходимо прочитать эти ссылки.
Первый, от выдающегося EricLaw, о поведении Internet Explorer с заголовком Vary и некоторых проблемах, которые он ставит перед разработчиками: Vary Header предотвращает кеширование в IE . Короче говоря, IE (до IE9) не кэширует какой-либо контент, который использует заголовок Vary, потому что кеш запроса не включает заголовки HTTP-запроса. Эрик Лоу (Эрик Лоуренс в реальном мире) - менеджер программы в команде IE.
Второй - от Эрана Медана, и это постоянное обсуждение неожиданного поведения, связанного с Vary, в Chrome: поддержка некорректно обрабатывает заголовок Vary . Это связано с поведением IE, за исключением того, что разработчики Chrome использовали другой подход - хотя, похоже, это не было осознанным выбором.