J'utilise Amazon S3 pour servir des actifs statiques pour mon site Web. Je souhaite que les navigateurs mettent en cache ces ressources aussi longtemps que possible. Quels en-têtes de métadonnées dois-je inclure avec mes actifs
Cache-Control: max-age=???
En règle générale, un an est conseillé comme valeur maximale standard. Voir RFC 2616 :
Pour marquer une réponse comme "n'expire jamais", un serveur Origin envoie une date d'expiration environ un an après l'envoi de la réponse. Les serveurs HTTP/1.1 NE DEVRAIENT PAS envoyer de dates d'expiration plus d'un an à l'avenir.
Bien que cela s'applique à l'ancienne norme expires
, il est logique de l'appliquer à cache-control
également en l’absence de directives explicites sur les normes. C'est aussi long que vous devriez avoir besoin de toute façon et choisir une valeur arbitrairement plus longue pourrait casser certains agents utilisateurs. Alors:
Cache-Control: max-age=31536000
Pensez à ne pas le stocker "aussi longtemps que possible" et à vous installer à la place aussi longtemps que possible. Par exemple, il est peu probable que vous ayez besoin de le mettre en cache pendant plus de 10 ans ... ai-je raison?
Le RFC discute ici de l'âge maximum: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.
Eric Lawrence dit qu'avant IE9, Internet Explorer traiterait comme obsolète toute ressource avec un Cache-Control: valeur d'âge maximum sur 2147483648 (2 ^ 31) secondes, environ 68 ans ( http: //blogs.msdn .com/b/ie/archive/2010/07/14/mises en cache-dans-Internet-Explorer-9.aspx ).
Les autres agents utilisateurs varieront bien sûr, alors ... essayez de choisir un nombre qui est peu probable (plutôt que probable!) De provoquer un débordement. L'âge maximum supérieur à 31536000 (un an) n'a pas beaucoup de sens, et officieusement, cela est considéré comme une valeur maximale raisonnable.
Les personnes qui ont créé la recommandation de mise en cache maximale d'un an ne l'ont pas bien réfléchie.
Tout d'abord, si un visiteur reçoit un fichier mis en cache obsolète, pourquoi aurait-il un avantage à le charger soudainement une nouvelle version après 1 an? Si un fichier a un TTL d'un an, d'un point de vue fonctionnel, cela signifie évidemment que le fichier n'est pas du tout destiné à être modifié.
Alors pourquoi aurait-on besoin de plus d'un an?
1) Pourquoi pas? Il ne sert à rien de dire au navigateur des visiteurs "hé, ce fichier a 1 an, ce pourrait être une idée de vérifier s'il a été mis à jour".
2) Services CDN. La plupart des réseaux de diffusion de contenu utilisent l'en-tête de cache pour décider de la durée de traitement efficace d'un fichier à partir du serveur Edge. Si vous avez un an de contrôle du cache pour les fichiers, il commencera à un moment donné à demander à nouveau des fichiers non modifiés au serveur d'origine, et Edge-cache devra être entièrement repeuplé, ce qui entraînera des charges plus lentes pour le client et inutile appels à l'Origine.
Quel est l'intérêt d'avoir max 1 an? Quels navigateurs s'étoufferont avec un montant supérieur à 31536000?