web-dev-qa-db-fra.com

Comment faire index.html pour ne pas mettre en cache lorsque le contenu du site a été modifié sur le site Web AngularJS?

Normalement, pour les fichiers .js et .css, nous ajouterons une version au cours de la compilation, telle que xx.js?v=123, puis après le déploiement du site Web, nous pourrons obtenir la nouvelle version de js et CSS. Mais je ne vois aucun endroit parler de la façon de mettre à jour le fichier index.html lors du déploiement du site Web. Et nous voyons dans IE que le contenu HTML aurait dû être modifié mais qu'il utilisait toujours l'ancien contenu HTML. 

Une solution que je trouve sur Google est de 

<meta http-equiv="Cache-control" content="no-cache">

Cependant, je ne suis pas sûr que ce soit la meilleure solution?

12
Rongyan Xia

Oui, c'est la bonne façon. Vous devez définir l'en-tête Cache-Control pour que les navigateurs sachent qu'ils ne doivent mettre en cache aucun contenu pour cette requête.

<meta http-equiv="Cache-control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">

(Pragma & Cache-Control est une seule et même chose mais à partir de la spécification HTTP différente. Voir la réponse ici: Différence entre les en-têtes Pragma et Cache-control? )

Voir une des réponses liées ici: Comment faire éclater le cache index.html yeoman

23
Shashank Agrawal

Comme mentionné dans les commentaires, il s’agit vraiment de la configuration du serveur que vous souhaitez examiner, mais vous n’avez pas mentionné votre configuration. Nous exploitons notre site AngularJS avec un backend .NET utilisant IIS.

Nous mettons à jour notre site régulièrement et avons eu des problèmes avec la mise en cache des ressources JS et CSS dans le passé, mais nous l'avons résolu grâce aux paramètres suivants:

Construire

Nous utilisons gulp pour construire notre application AngularJS et, dans ce cadre, nous ajoutons un numéro de version à la chaîne de requête de notre application principale, les fichiers CSS et Javascript qui changent fréquemment. Par exemple:

<link href="css/default.min.css?v=2" rel="stylesheet" />

Configuration du serveur

Dans la racine web.config, nous spécifions que nous ne voulons pas que le fichier index.html soit mis en cache en définissant les en-têtes de demande cache-control, Pragma et Expires ainsi que l'âge maximal à 0.

<location path="index.html">
<system.webServer>
  <staticContent>
    <clientCache cacheControlMode="DisableCache" cacheControlMaxAge="0.00:00:00" />
  </staticContent>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
            <add name="Pragma" value="no-cache" />
            <add name="Expires" value="-1" />
        </customHeaders>
    </httpProtocol>  
</system.webServer>
</location>

Références:

6
MikeS

Vous pouvez spécifier IIS à partir des paramètres avancés de sites spécifiques pour lesquels le préchargement n'est pas activé. Les performances de votre site vont toutefois en souffrir. Vérifiez également que le pool d'applications du site Web spécifique a intégré le mode de pipeline et la version .NET CLR. 

0
Kurosh Farsimadan

En définissant la valeur du contenu sur 0, les navigateurs chargeront toujours la page à partir du serveur Web.

<meta http-equiv="expires" content="0">
0
Nikhil Mahirrao