Je suis en train de configurer un CDN pour mon site Web. J'ai trouvé l'exemple suivant à ajouter au fichier 'httpd.conf'. Il permet d'ajuster la durée de cache pour le client et le CDN:
ExpiresActive On
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/js "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-shockwave-flash "access plus 1 year"
<FilesMatch "\.(gif|jpe?g|png|ico|css|js|swf)$">
Header set Cache-Control "s-maxage=600"
</FilesMatch>
Supposons maintenant que j'ai mis à jour un fichier image, le CDN (s-maxage = 600) serait actualisé en 600 secondes, mais qu'en est-il du client? Puisque "max-age" est défini sur 1 an, si le client visite de nouveau mon site Web, envoie-t-il quand même une requête HTTP pour vérifier le contenu mis à jour et télécharger la nouvelle version? Comment ça marche réellement?
Merci!!
L'en-tête s-maxage
est destiné aux mandataires, tandis que max-age
est destiné aux utilisateurs habituels.
Un utilisateur final typique (n'utilisant pas de proxy) aurait le fichier mis en cache pendant un an. Le même devrait est le cas pour quelqu'un qui utilise un proxy également, car le proxy enverra probablement le fichier sans modification, c'est-à-dire incluant l'en-tête max-age
.
Mais le proxy lui-même ne le mettrait en cache que pendant 600 secondes. Ainsi, lorsqu'un autre utilisateur du même proxy se présente, son navigateur demande le fichier et le proxy récupère une nouvelle copie de votre serveur.
Pour être honnête, je ne pense pas qu'il y ait de vraie raison de fixer une date d'expiration aussi courte pour les mandataires lorsque les utilisateurs réguliers ont une expiration longue. Vous devez les régler de la même manière (c.-à-d. Définir s-maxage
sur le nombre de secondes d'une année).