#FOSHttpCacheBundle

Retour sur une présentation de  Jérôme Vieilledent / @jvieilledent et David Buchmann / @dbu du bundle FOSHttpCacheBundle présenté lors de la Symfony Live Paris 2015

Introduction

La mise en cache de document Web (ex : page web, images) est utilisée afin de réduire la consommation de bande passante, la charge du serveur web (les tâches qu'il effectue), ou améliorer la rapidité de consultation lors de l'utilisation d'un navigateur web.

Normalement, chaque objet de la page web a une durée de validité. Lors du chargement de la page, l'équipement vérifie si l'objet est dans son cache et si la date de validité est bonne. Si ces contrôles sont positifs, il charge l'objet dans son cache au lieu de le demander à l'application web.

(cf wikipedia )

Inconvénient du cache

Dans une application, il ne faut pas tout cacher : certains contenus sont sensibles, d’autres dépendent du contexte utilisateur.

Par exemple que diriez-vous si vos utilisateurs se retrouvaient avec la page d’administration que vous avez générée en tant que super administrateur ? Tous vos boutons de modification et de suppression se retrouveront sur les pages vues par vos utilisateurs.

Cache http

Le cache HTTP est un protocole normalisé permettant d’échanger les en-têtes relatifs à la gestion du cache entre le serveur Web et les différents équipements susceptibles de servir de cache. Ce protocole permet d’indiquer si des éléments doivent ou non être mis en cache, permet de préciser la durée de vie du cache, mais permet également de cacher des éléments dépendant du contexte utilisateur ou de mettre en cache des fragments de page.

FOSHttpCacheBundle est une extension de Symfony qui facilite la mise en œuvre du cache HTTP.

Exemple de cache variant avec le contexte utilisateur

Dans notre exemple, notre site propose des pages dont le contenu dépend du profil utilisateur : nous allons donc générer un hash associé à chaque profil utilisateur. Ce hash sera stocké dans l’en-tête « user-context » qui lui-même sera référencé dans l’en-tête « vary » permettant d’indiquer au cache HTTP qu’il est nécessaire de stocker en cache une version de la page pour chaque valeur de « user-context » (FOSHttpCacheBundle permet de faire cela très simplement).

Lors de la première demande d’une page pour un nouvel utilisateur - l’utilisateur n’ayant pas de hash correspondant à son profil - le reverse proxy fait une demande au server web qui lui renvoie le hash.

Si le reverse proxy n’a pas de page en cache avec ce hash, il va la demander au serveur, la mettre en cache, et l’envoyer à l’utilisateur.

Dans le cas où notre page a déjà été visitée par un utilisateur ayant le même profil, le reverse proxy sera en mesure de délivrer la page stockée en cache sans la redemander au serveur. 

En synthèse

FOSHttpCacheBundle est une librairie de Symfony qui permet de tirer pleinement parti du cache HTTP.

En utilisant les différents en-têtes (private, public, s-maxage, max-age, expires, etag, vary, …), vous pourrez jouer très finement sur ce qui est caché et pendant combien de temps.

En utilisant les Edge Side Includes (ESI), vous serez en mesure de mettre en cache des fragments de page en cache et de mettre ainsi en œuvre des logiques de cache adaptées à chaque bloc de votre page.

Liens connexes

Vous pouvez aussi retrouver l’ensemble des liens vers les présentations de la conférence ici.

Bastien D.

Ajouter un commentaire