Варіювання відповіді для 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
{
    // ...
}