Est-ce correct ?
Oui, Expires et max-age font la même chose, mais de deux manières différentes. Même chose pour Last-Modified et Etag.
Si oui, dois-je faire expires ou max-age ?
Expires dépend de la précision de l'horloge de l'utilisateur, c'est donc un mauvais choix (la plupart des navigateurs supportent HTTP/1.1). Utilisez max-age, pour indiquer au navigateur que le fichier est valable pendant ce nombre de secondes. Par exemple, un cache d'un jour serait :
Cache-Control : max-age=86400
Notez que lorsque les deux Cache-Control
y Expires
sont présents, Cache-Control
a la priorité. lire
Si je dois également indiquer Last-Modified ou ETag, lequel des deux ? Je pense que je dois faire Last-Modified
Vous avez raison, Last-Modified devrait être mieux. Bien qu'il s'agisse d'une heure, elle est envoyée par le serveur. Il n'y a donc pas de problème avec l'horloge de l'utilisateur. C'est la raison pour laquelle Last-Modified est meilleur que Expires. Le navigateur envoie le Last-Modified que le serveur a envoyé la dernière fois qu'il a demandé le fichier, et si c'est le même, le serveur répond avec une réponse vide "304 Not Modified".
Il faut également noter que l'ETag peut également être utile, car le paramètre Last-Modified a une fenêtre temporelle d'une seconde. Vous ne pouvez donc pas distinguer deux sources différentes avec la même valeur Last-Modified. [2]
Etag nécessite un peu plus de calcul que Last-Modified, car il s'agit d'une signature de l'état actuel du fichier (similaire à une somme md5 ou un CRC32).
Par ailleurs, pour quels fichiers dois-je activer la mise en cache du navigateur ?
Tous les fichiers peuvent bénéficier de la mise en cache. Vous avez deux approches différentes :
- avec max-age : utile pour les fichiers qui ne changent jamais (images, CSS, javascript). Tant que la valeur max-age est respectée, le navigateur n'envoie aucune requête au serveur. Vous verrez donc la page se charger très rapidement lors du deuxième chargement. Si vous devez mettre à jour des fichiers, ajoutez simplement un point d'interrogation, et la date de modification (par exemple /image.png?20110602, ou pour une meilleure mise en cache par proxy, quelque chose comme /20110602/image.png ou /image.20110602.png). De cette façon, vous pouvez faire en sorte que les fichiers expirent s'ils sont urgents (rappelez-vous que le navigateur ne frappe presque jamais le serveur une fois qu'il a un fichier d'âge maximum). L'utilisation principale est d'accélérer les choses et de limiter les demandes envoyées au serveur.
- avec Last-Modified : peut être défini sur tous les fichiers (y compris ceux avec max-age). Même si vous avez des pages dynamiques, il se peut que vous ne changiez pas le contenu du fichier pendant un certain temps (même si c'est 10 min), donc cela peut être utile. L'utilisation principale ici est de dire au navigateur "continuez à me demander ce fichier, s'il est nouveau, je vous enverrai le nouveau". Il y a donc une demande envoyée à chaque chargement de page, mais la réponse est vide si le fichier est déjà bon (304 Not Modified), ce qui permet d'économiser de la bande passante.
Plus vous utilisez la mémoire cache, plus vos pages s'afficheront rapidement. Mais comme il est difficile de vider les caches, il faut faire preuve de prudence.
Un bon endroit pour apprendre tout cela avec de nombreuses explications : http://www.mnot.net/cache_docs/
[2] : rfc7232 Etag https://www.rfc-editor.org/rfc/rfc7232#section-2.3