Passer au contenu principal

Comprendre et utiliser le Gateway Cache en Symfony

Lorsqu'on utilise la mise en cache avec HTTP, le cache est complètement dissocié de votre application. Il se positionne entre votre application et le client qui envoie la requête.

Le rôle du cache est de recevoir les requêtes du client et de les transmettre à votre application. De même, le cache reçoit les réponses de votre application et les renvoie au client. Le cache agit donc comme un « intermédiaire » dans la communication requête-réponse entre le client et votre application.

Au cours de ce processus, le cache stocke chaque réponse qui peut être mise en cache. Si la même ressource est demandée ultérieurement, le cache renvoie la réponse mise en cache au client, sans solliciter votre application.

Ce type de cache est connu sous le nom de « HTTP gateway cache ». Il existe plusieurs outils pour cela, comme Varnish et le reverse proxy de Symfony.

Comment activer et configurer le cache HTTP sur Symfony ?

Pour activer le cache en mode production, vous pouvez utiliser la configuration suivante :

when@prod:
    framework:
        http_cache: true

Dans ce cas, le Kernel agit immédiatement comme un reverse-proxy, mettant en cache les réponses de votre application et les renvoyant au client.

Une fois cette étape franchie, vous êtes prêt à mettre en cache vos réponses. Pour cela, vous devez indiquer à votre cache quelles réponses peuvent être mises en cache et pendant combien de temps. Cela se fait en définissant des en-têtes de cache HTTP sur la réponse.

HTTP spécifie quatre en-têtes de cache de réponses que vous pouvez définir pour activer la mise en cache : Cache-ControlExpiresETag et Last-Modified.

Explication des états de cache HTTP sur Symfony : X-Symfony-Cache

En mode debug, Symfony ajoutera automatiquement l’en-tête X-Symfony-Cache à une réponse HTTP pour fournir des informations sur l’état du cache de réponse.

MISS La réponse n’est pas mise en cache et a été générée dynamiquement pour cette requête spécifique.
HIT La réponse a été récupérée du cache et renvoyée sans avoir à générer à nouveau la réponse.
EXPIRED La réponse a été mise en cache, mais le cache a expiré, donc une nouvelle réponse doit être générée.
STALE La réponse mise en cache est utilisée même si elle a expiré, mais une nouvelle réponse est générée en arrière-plan pour une utilisation future.
REVALIDATED La réponse a été mise en cache, mais elle a été revalidée avec la source originale pour déterminer si elle est toujours valide.
INVALID La réponse mise en cache est invalide et ne peut pas être utilisée.