Варіювання відповіді для HTTP-кешу
Дата оновлення перекладу 2023-09-19
Варіювання відповіді для HTTP-кешу
До цих пір припускалося, що кожний URI має лише одне представлення цільового ресурсу. За замовчуванням, HTTP-кешування відбувається з використанням URI ресурсу в якості ключа кешу. Якщо двоє людей запитують один і той же UR ресурсу, що кешується, то друга людина отримає кешовану версію.
Іноді цього недостатньо, і необхідно кешувати різні версії одного і того ж 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
{
// ...
}