web-dev-qa-db-fra.com

La mise en cache du navigateur peut-elle être contrôlée uniquement par des en-têtes HTTP sans utiliser de noms de hachage pour les fichiers d'actif?

Je le lis dans Webpack docs :

La façon dont cela fonctionne présente un piège: si nous ne changeons pas le nom des fichiers de nos ressources lors du déploiement d’une nouvelle version, le navigateur peut penser qu’elle n’a pas été mise à jour et le client en obtiendra une version mise en cache.

Je suis curieux de savoir s'il est obligatoire d'utiliser ce mécanisme avec les noms de fichiers laids main.55e783391098c2496a8f.js pour les actifs afin d'informer le navigateur qu'un fichier d'actif a été modifié.

Peut-il être contrôlé par les en-têtes HTTP uniquement? La norme comporte plusieurs en-têtes HTTP permettant de contrôler la mise en cache des actifs par le navigateur, par exemple:

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Date: Wed, 24 Aug 2020 18:32:02 GMT
Last-Modified: Tue, 15 Nov 2024 12:45:26 GMT
ETag: x234dff
max-age: 12345

Alors, puis-je utiliser ces en-têtes seuls? Ou dois-je encore me préoccuper des parties de hachage dans les noms de fichiers main.55e783391098c2496a8f.js?

2
Green

Oui, vous pouvez dire au navigateur de ne rien mettre en cache, mais votre site sera alors plus lent, car les visiteurs doivent télécharger à nouveau les fichiers à chaque chargement de page.

Les fichiers auxquels vous faites référence sont générés automatiquement. Je ne vois donc aucune raison de vous "déranger", ce ne sont que des noms de fichiers que ni vous ni vos visiteurs ne devez traiter.

Si cela vous pose vraiment problème, un juste milieu pourrait consister à conserver le nom "Nice" et à l'expiration d'un jour ou deux. Ainsi, les différents chargements de pages au cours d'une session n'entraîneraient pas de re-téléchargement des fichiers, mais s'ils reviennent dans quelques jours, ils auront définitivement la dernière version.

1
DisgruntledGoat

Vous n'avez vraiment pas besoin d'utiliser hashname dans vos fichiers (js ou css), le navigateur saura que le fichier a été modifié par votre ETAG .

Cette réponse pourrait également vous aider .

1
Goyllo

Eh bien, si vous lui dites de ne jamais mettre en cache, rien ne sera jamais mis en cache. Vous devez donc changer le nom du fichier, mais il n’est pas nécessaire que ce soit aussi laid que vous le montrez. Pour certains clients, j'ajoute la date du changement comme suit: main-01012017.js

0
Rob