Nous voulons mettre en cache le buste sur les déploiements de production, mais ne pas perdre beaucoup de temps à trouver un système pour le faire. Ma pensée était d'appliquer un paramètre à la fin des fichiers css et js avec le numéro de version actuel:
<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>
Deux questions: cela cassera-t-il efficacement le cache? Le paramètre amènera-t-il le navigateur à ne jamais mettre en cache la réponse de cette URL puisque le paramètre indique qu'il s'agit d'un contenu dynamique?
la source
<link rel="stylesheet" href="style.css?v=1487935578" />
Oui. Même Stack Overflow utilise cette méthode, même si je me souviens qu'ils (avec leurs millions de visiteurs par jour et des millions de versions et de configurations de client et de proxy différentes) ont eu des cas extrêmes où même cela n'était pas suffisant pour briser le cache. Mais l'hypothèse générale est que cela fonctionnera et constitue une méthode appropriée pour interrompre la mise en cache sur les clients.
Non. Le paramètre ne changera pas la politique de mise en cache; les en-têtes de mise en cache envoyés par le serveur s'appliquent toujours, et s'il n'en envoie pas, les valeurs par défaut du navigateur.
la source
/static/v22/file.css
comme vous pouvez faire plusieurs fichiers avec un seul nom de dossier, par exemple/static/v23/file.css
et/static/v23/mystuff.js
Il est plus sûr de mettre le numéro de version dans le nom de fichier réel. Cela permet à plusieurs versions d'exister à la fois afin que vous puissiez déployer une nouvelle version et s'il existe encore des pages HTML mises en cache qui demandent l'ancienne version, elles obtiendront la version qui fonctionne avec leur HTML.
Notez que dans l'un des plus grands déploiements versionnés sur Internet, jQuery utilise les numéros de version dans le nom de fichier réel et permet en toute sécurité à plusieurs versions de coexister sans aucune logique particulière côté serveur (chaque version est juste un fichier différent).
Cela casse le cache une fois lorsque vous déployez de nouvelles pages et de nouveaux fichiers liés (ce que vous voulez) et à partir de là, ces versions peuvent être efficacement mises en cache (ce que vous voulez également).
la source
Comme d'autres l'ont dit, le contournement du cache avec un paramètre de requête est généralement considéré comme une mauvaise idée (tm), et ce depuis longtemps. Il est préférable de refléter la version dans le nom du fichier. Html5 Boilerplate recommande de ne pas utiliser la chaîne de requête, entre autres.
Cela dit, parmi les recommandations que j'ai vues qui citent une source, toutes semblent tirer leur sagesse d'un article de 2008 de Steve Souders. Ses conclusions sont basées sur le comportement des mandataires à l'époque, et elles peuvent ou non être pertinentes de nos jours. Pourtant, en l'absence d'informations plus récentes, changer le nom du fichier est l'option la plus sûre.
la source
Il va casser le cache une fois, après que le client a téléchargé la ressource, toutes les autres réponses seront servies à partir du cache client à moins que:
la source
En général, cela devrait être bien, mais il est possible que cela ne fonctionne pas s'il existe un cache intermédiaire (un proxy) configuré pour ignorer les paramètres de la requête.
Par exemple, si vous diffusez du contenu statique via Akamai CDN, il peut être configuré pour ignorer les paramètres de requête afin d'éviter le contournement du cache à l'aide de cette méthode.
la source
Cela dépend beaucoup de la robustesse de votre mise en cache. Par exemple, le serveur proxy squid (et peut-être d'autres) par défaut ne met pas en cache les URL servies avec une chaîne de requêtes - du moins, il l'a fait lorsque cet article a été écrit. Si certains cas d'utilisation ne vous dérangent pas, provoquant des erreurs de cache inutiles, continuez avec les paramètres de requête. Mais il est très facile de mettre en place un schéma de contournement du cache basé sur les noms de fichiers qui évite ce problème.
la source
Nous avons trouvé une comparaison des 2 techniques (chaîne de requête vs nom de fichier) ici :
La version en tant que chaîne de requête a deux problèmes.
la source
Une autre approche similaire consiste à utiliser htaccess mod_rewrite pour ignorer une partie du chemin lors de la diffusion des fichiers. Votre page d'index jamais mise en cache fait référence au dernier chemin d'accès aux fichiers.
Du point de vue du développement, c'est aussi simple que d'utiliser des paramètres pour le numéro de version, mais c'est aussi robuste que l'approche du nom de fichier.
Utilisez la partie ignorée du chemin pour le numéro de version, et le serveur l'ignore simplement et sert le fichier non mis en cache.
1.2.3/css/styles.css
sert le même fichier quecss/styles.css
depuis que le premier répertoire est supprimé et ignoré par le fichier htaccessY compris les fichiers versionnés
Notez que cette approche signifie que vous devez désactiver la mise en cache de votre page d'index - Utilisation des balises <meta> pour désactiver la mise en cache dans tous les navigateurs?
fichier .htaccess
Vous pouvez adopter la même approche sur n'importe quelle plate-forme de serveur permettant la réécriture d'url
(condition de réécriture adaptée de mod_rewrite - réécriture du répertoire dans la chaîne de requête sauf / #! / )
... et si vous avez besoin d'un contournement du cache pour votre page d'index / point d'entrée de site, vous pouvez toujours utiliser JavaSript pour l'actualiser.
la source
la source
la source
J'espère que cela devrait vous aider à injecter un fichier JS externe
Source - Code Cachebuster en JavaScript
la source