Ils sont légèrement différents - l'ETag n'avons pas toutes les informations que le client peut utiliser pour déterminer si ou de ne pas faire une demande pour que le fichier de nouveau dans l'avenir. Si ETag est tout ce qu'il a, il faudra toujours faire une demande. Toutefois, lorsque le serveur lit le ETag de la demande du client, il peut alors décider d'envoyer le fichier (HTTP 200) ou de dire au client d'utiliser seulement leur copie locale (HTTP 304). Un ETag est fondamentalement juste une somme de contrôle d'un fichier sémantiquement changements lorsque le contenu de la modification du fichier.
L'en-tête Expires est utilisé par le client (et les mandataires/caches) afin de déterminer si oui ou non il doit même faire une demande pour le serveur. Le plus vous êtes proche de l'Expiration de la date, plus il est probable que le client (ou proxy), fera une requête HTTP pour ce fichier à partir du serveur.
Alors, vraiment ce que vous voulez faire est d'utiliser les DEUX en-têtes - définir l'en-tête Expires à une valeur raisonnable basé sur la façon dont souvent les changements de contenu. Puis configurer les ETags à être envoyé, de sorte que lorsque les clients NE envoyer une requête au serveur, il peut plus facilement déterminer si ou de ne pas envoyer le fichier.
Une dernière remarque à propos de l'ETag - si vous utilisez une charge équilibrée à l'installation du serveur avec plusieurs ordinateurs exécutant Apache, vous voudrez probablement désactiver ETag génération. C'est parce que les inodes sont utilisés dans le cadre de l'ETag algorithme de hachage qui sera différente entre les serveurs. Vous pouvez configurer Apache de ne pas utiliser les inodes dans le cadre du calcul mais alors, vous voulez vous assurer que la date et l'heure sur les fichiers sont exactement les mêmes, pour assurer le même ETag est généré pour tous les serveurs.