2010-11-17 11 views
9

Contextela mise en cache de sortie en ajoutant encore Cache-Control: no-cache même lorsqu'il est désactivé

Un client exécute notre application web. sur HTTPS et sont en cours d'exécution dans le IE8 "(ne sait pas écrire) fichier ne peut être écrit en cache" erreur lorsqu'ils essaient d'afficher un fichier PDF/Excel/word parce que la réponse contient la directive HTTP Cache-Control:no-cache. Le fait est que ce n'est pas notre application (ou sa config) qui ajoute cette directive.

Après un peu d'investigation, j'ai découvert que la fonction de mise en cache de sortie de page IIS7 peut également ajouter cet en-tête, par exemple

<caching enabled="false" enableKernelCache="false"> 
    <profiles> 
     <add extension=".htm" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> 
    </profiles> 
</caching> 

aura pour effet d'ajouter Cache-Control:no-cache, private aux en-têtes de réponse.

Ma question

Mais le surprenant (OMI) chose est que même lorsque vous censé désactiver la fonction (voir dans mon extrait de configuration ci-dessus que enabled="false"), les en-têtes de réponse sont encore envoyés avec Cache-Control:no-cache, private . Suis-je stupide d'être surpris par cela (je suppose que je suis probablement)?

Répondre

5

Vous n'êtes pas seul: http://forums.iis.net/t/1152306.aspx

Nous avons eu le même problème. Je n'ai trouvé aucune documentation sur cette "fonctionnalité" donc je suppose que c'est un bug.

Nous avons décidé de supprimer simplement la balise de mise en cache et d'utiliser uniquement la balise clientCache à la place.

4

Supprimer le '.' au sein de l'attribut d'extension:

<profiles> 
    <add extension="htm" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> 
</profiles> 
+0

Ce droit ici devrait être la bonne réponse. – Prescient

+1

Non, ce n'est pas correct. Vous l'avez probablement fait fonctionner parce que vous avez défini la section '' ailleurs. Lorsque vous supprimez le point, cette extension d'ajout devient inutile, ce qui rend la section '' effective. – chenz

+0

** C'est juste correct! ** J'ai juste essayé ce "sachant" que cela ne fonctionnerait pas parce que, bien, l'exemple IIS vous donne dans l'interface graphique pour la mise en cache de sortie montre que vous devez inclure le '.' avant l'extension ... ** Mais cela a fonctionné! ** Je vous assure, c'est la bonne réponse pour IIS 8 - voir ici http://i66.tinypic.com/2e249af.png – Jimbo

0

Essayez d'ajouter ceci à votre web.config, complètement supprimé l'en-tête Cache-Control pour moi:

<system.Webserver> 
<staticContent> 
<clientCache cacheControlMode="NoControl" /> 
</staticContent> 
</system.Webserver> 
7

Qu'est-ce efficace est débarrassé de no-cache pour moi ajoutais location="Any" à l'élément add, qui écrit à la place Cache-Control:public:

<caching enabled="false" enableKernelCache="false"> 
    <profiles> 
     <add extension=".htm" ... location="Any" /> 
    </profiles> 
</caching> 

En l'absence duAttribut, IIS par défaut à Cache-Control:no-cache. D'autres valeurs possibles sont Client, Downstream, Server ou ServerAndClient. Détails here.

+0

Grrr, que «détails ici» page iis.net, donne l'exemple de configuration '' qui ** n'inclut pas 'location', ce qui veut dire que j'ai juste commencé à jurer sur mon serveur web pour faire correctement son travail et finir ici. – icc97