2010-10-14 12 views
23

Est-il possible de désactiver la mise en cache d'un seul fichier javascript dans mon application ASP.NET sans désactiver la mise en cache des autres fichiers dans l'application?Comment désactiver la mise en cache d'un fichier individuel dans IIS 7 en utilisant les paramètres de configuration weserver

Il s'exécute sur IIS 7 dans Azure, donc pour moi, il semble que mes seules options de contrôle sont dans les balises du serveur web.

J'utilise actuellement la configuration folowwing, mais cela désactive le cache sur tous les fichiers.

 <modules runAllManagedModulesForAllRequests="true"/> 

    <staticContent> 
     <clientCache cacheControlMode="DisableCache"/> 
    </staticContent> 

    </system.webServer> 

Je veux simplement désactiver le cache d'un seul fichier javascript qui change assez souvent.

Est-ce possible?

+0

Oui, il est possible, vous pouvez le faire dans votre fichier configurtion: Enroulez le dans , (voir mon post ci-dessous) – jherax

Répondre

7

Vous allez vouloir regarder la classe System.WebServer/Caching, où vous pouvez appliquer un profil de mise en cache à des extensions particulières. Cela vous permettra au moins de le contrôler pour tous les fichiers Javascript se terminant par le .js. Cela devrait désactiver la mise en cache de .js sur la mise en mémoire cache du processus et du noyau depuis le nuage.

I pensez vous pouvez créer ce fichier web.config dans un dossier qui contient uniquement votre fichier et désactivera la mise en cache pour .js uniquement à ce niveau de dossier. Honnêtement, je n'ai pas essayé cela moi-même, donc juste une suggestion que vous pourriez tester.


Au-delà, un coup d'oeil à la documentation IIS liée à config cache:

/Mise en cache: http://www.iis.net/ConfigReference/system.webServer/caching

/Mise en cache/Profils: http://www.iis.net/ConfigReference/system.webServer/caching/profiles

/de caching/Profils/Ajouter: http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add

Espérons que, plus quelques recherches sur ces étiquettes de configuration aideront.

Sinon, je vous recommande de regarder dans la mise en œuvre d'un module HTTP personnalisé que vous pouvez insérer dans le tube de requête IIS, qui peut filtrer votre contrôle de la mise en cache jusqu'à ce fichier particulier

** pour ce que ça vaut ce est juste un comportement IIS et ne sera pas différent dans Azure, vous pouvez facilement tester ce local sans vous soucier de la structure Dev ou du test Azure.

+0

Cette réponse est manquante la balise pour la configuration. Voir "Quelle serait la réponse cool" pour le format correct. – Ant

+0

Aussi, je devrais noter, 'policy = "DontCache"' n'a pas fonctionné pour moi mais 'policy = "DisableCache"' a fonctionné. – Ant

7

On dirait que la réponse ci-dessus manque une étiquette « profils »

<caching> 
    <profiles> 
    <add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/> 
    </profiles> 
</caching> 
+0

Juste en répétant ici, 'policy = "DontCache"' n'a pas fonctionné pour moi mais 'policy = "DisableCache"' a fonctionné. – Ant

32

Je viens de tombé sur cette question; vous pouvez utiliser ce qui suit pour désactiver le cache sur un fichier spécifique:

<configuration> 
    <location path="path/to/the/file"> 
    <system.webServer> 
     <staticContent> 
     <clientCache cacheControlMode="DisableCache" /> 
     </staticContent> 
    </system.webServer> 
    </location> 
</configuration> 

(Notez que le chemin est relatif au fichier web.config)

Sinon, placez le seul fichier dans un répertoire sur son propre, et donner à ce répertoire son propre site Web.config qui désactive la mise en cache pour tout ce qui s'y trouve;

<configuration> 
    <system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Cache-Control" value="no-cache" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 
</configuration> 

[testé sur deux IIS7.5 sur Windows 7, mais vous confirmer que cela fonctionne sur OK Azure]

+2

J'ai fait la première alternative, et cela fonctionne sur Azure. –

+0

Fonctionne parfaitement pour le contexte statique publié sur une application Web Azure via le contrôle de code source ou l'intégration continue. Dans mon cas, une application CLI construite par Angular où la construction de production prend soin de créer des noms de casse de cache pour les fichiers de l'ensemble et tout ce que je veux que la non-mise en cache est le index.html. Merci! –

3

Vous pouvez désactiver la mise en cache de sortie au niveau du dossier en supprimant une extension sur le dossier niveau en incluant un web.config dans ce dossier comme celui-ci

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <caching> 
      <profiles> 
       <remove extension=".js" /> 
      </profiles> 
     </caching> 

    </system.webServer> 
</configuration> 

maintenant ce dossier ne sera pas la mise en cache de sortie activé pour les fichiers se terminant par .js

0

Oui, il est possibl e, vous pouvez le faire dans le fichier de configuration:
(Voir https://stackoverflow.com/a/4821328/2247494)

<configuration> 
    <location path="cache.manifest"> 
     <system.webServer> 
     <staticContent> 
      <clientCache cacheControlMode="DisableCache" /> 
     </staticContent> 
     </system.webServer> 
    </location> 
</configuration> 
0

Ouvrir le panneau IIS.

Ouvrez l'application associée à partir des sites, puis accédez au dossier contenant un fichier particulier.

maintenant du volet droit, passez à afficher le contenu

Sélectionnez le fichier désiré

Maintenant faites un clic droit sur le fichier à choisir « Passer au Feature View ». À partir de là, choisissez les en-têtes de réponse HTTP, cliquez sur "Ajouter" pour ajouter un nouvel en-tête, ajoutez un en-tête "Cache-Control" avec la valeur "no-cache".