J'ai regardé autour de moi, mais je n'ai pas réussi à savoir si je devrais utiliser à la fois un ETag et un en-tête Expires ou l' un ou l'autre.
Ce que j'essaie de faire, c'est de m'assurer que mes fichiers flash (et les autres images et non seulement sont mis à jour en cas de modification de ces fichiers.
Je ne veux rien faire de spécial comme changer le nom de fichier ou mettre des caractères étranges à la fin de l'URL pour ne pas le mettre en cache.
De plus, y a-t-il quelque chose que je dois faire par programmation de mon côté dans mes scripts PHP pour le supporter ou est-ce tout Apache?
http
caching
etag
expires-header
GeoffreyF67
la source
la source
Réponses:
Ils sont légèrement différents - l'ETag ne dispose d'aucune information que le client peut utiliser pour déterminer s'il doit ou non faire une nouvelle demande pour ce fichier à l'avenir. Si ETag est tout ce qu'il a, il devra toujours faire une demande. Cependant, lorsque le serveur lit l'ETag à partir de la demande du client, le serveur peut alors déterminer s'il faut envoyer le fichier (HTTP 200) ou dire au client d'utiliser simplement leur copie locale (HTTP 304). Un ETag est simplement une somme de contrôle pour un fichier qui change sémantiquement lorsque le contenu du fichier change.
L'en-tête Expires est utilisé par le client (et les mandataires / caches) pour déterminer s'il doit ou non même faire une demande au serveur. Plus vous êtes proche de la date d'expiration, plus il est probable que le client (ou proxy) fera une demande HTTP pour ce fichier à partir du serveur.
Donc, ce que vous voulez vraiment faire, c'est utiliser les DEUX en-têtes - définissez l'en-tête Expires sur une valeur raisonnable en fonction de la fréquence à laquelle le contenu change. Configurez ensuite les ETags à envoyer de sorte que lorsque les clients envoient une demande au serveur, il puisse plus facilement déterminer s'il faut renvoyer ou non le fichier.
Une dernière remarque sur ETag - si vous utilisez une configuration de serveur à charge équilibrée avec plusieurs machines exécutant Apache, vous souhaiterez probablement désactiver la génération ETag. En effet, les inodes sont utilisés dans le cadre de l'algorithme de hachage ETag qui sera différent entre les serveurs. Vous pouvez configurer Apache pour ne pas utiliser les inodes dans le cadre du calcul, mais vous devez vous assurer que les horodatages des fichiers sont exactement les mêmes, pour garantir que le même ETag soit généré pour tous les serveurs.
la source
Etag - têtes et Last-modified sont des validateurs .
Ils aident le navigateur et / ou le cache (proxy inverse) à comprendre si un fichier / page a changé, même s'il conserve le même nom.
Expire et Cache-control donnent des informations de rafraîchissement .
Cela signifie qu'ils informent, le navigateur et les procurations inverses intermédiaires, jusqu'à quelle heure ou pendant combien de temps, ils peuvent conserver la page / le fichier dans leur cache.
Ainsi, la question est généralement de savoir quel validateur utiliser, etag ou dernière modification, et qui actualise l'en-tête des informations à utiliser, expire ou contrôle du cache.
la source
Expires
etCache-Control
sont des "en-têtes de mise en cache forts"Last-Modified
etETag
sont des "en-têtes de mise en cache faibles"D'abord, le navigateur vérifie
Expires/Cache-Control
s'il faut ou non faire une demande au serveurSi vous devez faire une demande, il enverra
Last-Modified/ETag
la demande HTTP. Si laEtag
valeur du document correspond à cela, le serveur enverra un code 304 au lieu de 200 et aucun contenu. Le navigateur chargera le contenu de son cache.la source
Par défaut, Apache générera un Etag basé sur le numéro d'inode du fichier, la date de dernière modification et la taille, ce qui devrait être parfaitement adapté pour faire ce que vous voulez. Je pense qu'il générera également par défaut un en-tête Last-Modified basé sur la dernière heure de modification du fichier sur le disque, ce qui est également parfaitement adapté pour faire ce que vous voulez.
Vous devriez probablement aussi demander à Apache d'envoyer un en-tête Expires daté d'un an à l'avenir (selon http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21 ) afin que les navigateurs sachent que le contenu est cacheable. Jetez un œil à mod_expires pour configurer cela.
la source
Un autre résumé:
Vous devez utiliser les deux. Les ETags sont des informations "côté serveur". Les expirations sont une mise en cache "côté client".
Utilisez ETags sauf si vous avez un serveur à charge équilibrée. Ils sont sûrs et permettront aux clients de savoir qu'ils doivent obtenir de nouvelles versions de vos fichiers serveur chaque fois que vous modifiez quelque chose de votre côté.
Expires doit être utilisé avec prudence, comme si vous définissez une date d'expiration dans le futur mais que vous souhaitez modifier l'un des fichiers immédiatement (un fichier JS par exemple), certains utilisateurs peuvent ne pas obtenir la version modifiée avant longtemps!
la source
Une autre chose que je voudrais mentionner que certaines des réponses peuvent avoir manqué est l'inconvénient d'avoir les deux
ETags
etExpires/Cache-control
dans vos en-têtes.Selon vos besoins, cela peut simplement ajouter des octets supplémentaires dans vos en-têtes, ce qui peut augmenter les paquets, ce qui signifie plus de surcharge TCP. Encore une fois, vous devriez voir si le surcoût d'avoir les deux choses dans vos en-têtes est nécessaire ou cela ajoutera-t-il simplement un poids supplémentaire à vos demandes, ce qui réduit les performances.
Vous pouvez en lire plus sur cet excellent article de blog de Kyle Simpson: http://calendar.perfplanet.com/2010/bloated-request-response-headers/
la source
À mon avis, avec Expire Header, le serveur peut dire au client quand mes données seraient périmées, tandis qu'avec Etag, le serveur vérifierait la valeur etag pour le client à chaque demande.
la source
ETag est utilisé pour déterminer si une ressource doit utiliser la copie. et Expires Header comme Cache-Control est informé au client qu'avant les décennies de cache, le client doit récupérer la ressource locale.
Dans les sites modernes, il existe souvent un fichier nommé hash, comme
app.98a3cf23.js
, de sorte que c'est une bonne pratique d'utiliser l'en-tête Expires. En plus de cela, cela réduit également le coût du réseau.J'espère que cela aide ;)
la source