Варьирование ответа для HTTP-кеша

До этих пор предполагалось, что каждый URI имеет только одно представление целевого ресурса. По умолчанию, HTTP-кешрование происходит с исползованием URI ресурса в качестве ключа кеша. Если двое людей заправшивают один и тот же URI кешируемого ресурса, то второй человек получит кешированную версию.

Иногда этого недостаточно, и необходимо кешировать разные версии одного и того же URI, основываясь на одном или более значении заголовка запроса. Например, если вы сжимаете страницы, если клиент это поддерживает, любой URI имеет два представления: одно, если клиент поддерживает сжатие, а второе - если нет. Это определение проводится значением заголовка запроса Accept-Encoding.

В этом случае, вам нужно кешировать и хранить и сжатую и несжатую версиюответа для конкретного URI и возвращать их, в зависимости от значения запроса Accept-Encoding. Это делается с использованием заголовка ответа Vary, который представляет собой список различных заголовков, разделённых запятыми, значения которых вызывают разные представления запрошенного ресурса:

1
Vary: Accept-Encoding, User-Agent

Tip

Этот конкретный заголовок Vary будет кешировать разные версии каждого ресурса, основываясь на URI и значении загловков запроса Accept-Encoding и User-Agent.

Объект Response предлагает чистый интерфейс дла управления заголовком Vary:

1
2
3
4
5
// установить один заголовок варьирования
$response->setVary('Accept-Encoding');

// установить несколько заголовков варьирования
$response->setVary(array('Accept-Encoding', 'User-Agent'));

Метод setVary() берёт имя заголовка или массив имён заголовков, для которых варьируются ответы.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.