Comment configurer les en-têtes de contrôle de cache dans Apache

0
187

Le navigateur de chaque utilisateur utilise un cache intégré pour stocker les objets téléchargés, qui peuvent accélérer considérablement les visites répétées de votre site Web en chargeant à partir du disque plutôt que du réseau. Voici comment le configurer dans Apache.

Comment fonctionne la mise en cache ?

La première fois qu'un utilisateur se connecte à votre site, il télécharge toutes les ressources statiques nécessaires au rendu de la page, y compris des éléments tels que votre logo. Lorsqu'ils accèdent à une nouvelle page, votre logo est chargé à partir de la mémoire au lieu de le redemander, ce qui accélère considérablement les performances et réduit la charge sur votre serveur Web.

Il s'agit d'un cache côté client, mais de nombreux sites utiliseront également un réseau de diffusion de contenu, ou CDN. Un CDN est un réseau de serveurs qui se trouvent devant votre serveur Web principal, ou “origine” serveur. Ce réseau met en cache vos pages, augmentant votre bande passante maximale, réduisant la latence d'accès et réduisant considérablement la pression exercée sur votre serveur d'origine. Si vous souhaitez en savoir plus sur les CDN, vous pouvez lire notre guide à leur sujet ici.

Cache-Control est un en-tête que vous pouvez configurer votre serveur Web pour ajouter à toutes les requêtes sortantes, qui indiquera au navigateur et aux CDN comment mettre en cache votre contenu.

Certaines pages ne doivent jamais être mises en cache par des caches partagés tels que les CDN. Cela risquerait d'afficher les informations personnelles d'un utilisateur à d'autres. En règle générale, si la page doit être exactement la même pour tous les utilisateurs, comme votre page d'accueil, vous pouvez la mettre en cache. S'il affiche des informations confidentielles sur l'utilisateur, vous souhaiterez le mettre sur liste noire à partir de votre cache. Les ressources statiques, comme les CSS et les images, peuvent généralement être mises en cache pour tout le monde, souvent beaucoup plus longtemps.

Publicité

Le temps que l'objet passe dans le cache est également important. Appelé Time-To-Live (TTL), l'âge maximum de vos ressources mises en cache détermine combien de temps l'objet restera dans le cache avant d'être invalidé et incite l'utilisateur à demander un nouvel objet. Pour les ressources statiques qui ne changent pas beaucoup, vous pouvez définir des valeurs TTL très élevées, généralement autour de deux ans. Pour les éléments que vous souhaiterez peut-être mettre à jour, vous souhaiterez définir des valeurs TTL inférieures pour éviter que les ressources obsolètes ne restent trop longtemps dans le cache.

Vous pouvez toujours utiliser des noms de fichiers versionnés pour déclencher un rechargement du cache. Si vous publiez une nouvelle version d'une feuille de style CSS, vous pouvez la nommer styles-1.0.1.css, et le navigateur de l'utilisateur (et tous les CDN qui la précèdent) la verra comme un nouveau fichier qui a besoin à retélécharger. De plus, pour certains CDN, vous pouvez émettre des invalidations manuelles pour vider le cache existant sans modifier aucun nom de fichier.

Comment utiliser Cache-Control dans Apache

Cache-Control a quelques options :

  • public – Peut être mis en cache par n'importe qui, y compris les navigateurs et les CDN. Utilisez-le pour la plupart des objets statiques.
  • privé – Contient des données sensibles qui ne peuvent pas être mises en cache par des CDN ou des proxys inverses. Le navigateur de l'utilisateur peut le mettre en cache localement. Utilisez-le pour la plupart des pages authentifiées.
  • pas de cache – Malgré son nom, il ne désactive pas la mise en cache. Le navigateur peut toujours mettre en cache la réponse pour les performances, mais doit vérifier auprès du serveur d'origine les mises à jour avant de l'utiliser. Utilisez-le si vous souhaitez que l'utilisateur revalide à chaque fois.
  • pas de magasin – Désactive complètement la mise en cache. Utilisez-le uniquement pour les données hautement sensibles qui ne doivent pas être envoyées deux fois.

De plus, vous pouvez ajouter la directive no-transform , qui désactive toutes les conversions pouvant être effectuées sur la ressource. . Par exemple, certains CDN compressent les images pour réduire la bande passante. Cette directive désactive ce comportement.

Dans Apache, vous devrez définir cet en-tête manuellement à l'aide de la directive Header set, comme suit :

Header set Cache-Control “max-age= 84600, publique”

La valeur max-age est définie en secondes, par exemple, max-age=300 pour une durée de vie de cinq minutes et max-age=63072000 pour deux ans.

Vous pouvez mettre cette directive à la racine de votre configuration à appliquer à l'ensemble du site, mais une meilleure méthode consiste à appliquer les paramètres en fonction du type de fichier. Par exemple, pour définir une durée de vie élevée pour la plupart des médias statiques, vous pouvez utiliser un bloc FilesMatch :

<FilesMatch “.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf )$”> Ensemble d'en-tête Cache-Control “max-age=63072000, public” </FilesMatch> Publicité

Si vous souhaitez mettre sur liste noire un chemin spécifique pour qu'il ne soit pas mis en cache par les CDN, vous pouvez utiliser un bloc Répertoire :

<Répertoire “/private”> Ensemble d'en-tête Cache-Control “max-age=300, private” </Directory>

Ou faites simplement correspondre un seul fichier :

<File “protected.html”> Ensemble d'en-tête Cache-Control “max-age=300, private” </File>

Les blocs avec les correspondances les plus spécifiques auront la priorité sur les correspondances regex générales, mais vous voudrez vérifier que tout est correctement défini à la réception. Vous pouvez le vérifier à partir des DevTools de Chrome, sous Réseau > En-têtes.

Si vous n'avez accès qu'à la configuration .htaccess, vous pouvez toujours utiliser la correspondance de répertoire en créant un nouveau fichier .htaccess dans chaque sous-répertoire.

CONNEXES : Comment trouver votre dossier de configuration Apache

Utilisez Surrogate -Contrôle pour modifier directement le comportement du CDN

L'en-tête Surrogate-Control fonctionne exactement comme Cache-Control, mais détaille des instructions spécifiques pour les CDN et les proxys inverses, plutôt que pour les utilisateurs finaux. De cette façon, vous pouvez dire aux CDN de faire une chose, mais d'envoyer différentes directions au navigateur.

Vous devrez définir cet en-tête manuellement, de la même manière que vous définissez Cache-Control :

Ensemble d'en-têtes Surrogate-Control “max-age=300, public”

Vous voudrez certainement tester avec votre CDN pour vérifier que cela fonctionne—Surrogate-Control est assez nouveau, et n'est’ t universel.