Варьирование ответа для HTTP-кеша
Дата обновления перевода 2023-09-19
Варьирование ответа для 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
.
Установите заголовок Vary
через методы объекта Response
или атрибут #[Cache()]
:
1 2 3 4 5 6 7 8 9 10 11
// этот атрибут берёт массив с именем(ами) заголовка(ов)
// имена, для которых ответ варьируется
use Symfony\Component\HttpKernel\Attribute\Cache;
// ...
#[Cache(vary: ['Accept-Encoding'])]
#[Cache(vary: ['Accept-Encoding', 'User-Agent'])]
public function index(): Response
{
// ...
}