2010-02-03 3 views
132

Je voudrais configurer des règles dans IIS7 pour la mise en cache de contenu statique dans mon site Web ASP.NET.Comment configurer le cache de contenu statique par dossier et extension dans IIS7?

J'ai vu ces articles, qui détaille comment le faire en utilisant l'élément <clientCache /> dans web.config:

Client Cache <clientCache> (IIS.NET)
Add Expires or Cache Control Header to static content in IIS (Stack Overflow)

Cependant, ce paramètre semble appliquer globalement à tous statique contenu. Existe-t-il un moyen de faire cela uniquement pour certains répertoires ou extensions?

Par exemple, je peux avoir deux répertoires qui ont besoin de paramètres de cache séparés:

/static/images
/content/pdfs

Est-il possible de définir des règles pour l'envoi d'en-têtes de cache (max-age, expires, etc) basé sur les extensions et les chemins de dossier?

Veuillez noter que je dois être en mesure de le faire via web.config car je n'ai pas accès à la console IIS.

Répondre

201

Vous pouvez définir le cache-en-têtes spécifiques pour un dossier entier soit dans la racine de votre web.config:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <!-- Note the use of the 'location' tag to specify which 
     folder this applies to--> 
    <location path="images"> 
    <system.webServer> 
     <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" /> 
     </staticContent> 
    </system.webServer> 
    </location> 
</configuration> 

Ou vous pouvez spécifier dans un fichier web.config dans le dossier de contenu:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" /> 
    </staticContent> 
    </system.webServer> 
</configuration> 

Je ne suis pas au courant d'un mécanisme intégré pour cibler des types de fichiers spécifiques.

+1

Très bien. Me recommanderiez-vous un livre sur IIS 7? Je voudrais apprendre à propos de ces choses. Merci. – vtortola

+5

@vtortola - vous ne pouvez pas vous tromper avec le [kit de ressources IIS7] (http://www.amazon.co.uk/dp/0735624410), c'est en fait très utile. Le livre [Wrox Pro IIS7] (http://www.amazon.co.uk/dp/0470152532) n'est pas mauvais non plus. TBH J'ai appris principalement à partir du site de référence de configuration IIS.NET: http://www.iis.net/ConfigReference et de piquer sur le fichier '% systemroot% \ system32 \ inetsrv \ config \ applicationhost.config et les amis liés. – Kev

+6

Est-ce que quelqu'un sait si c'est récursif? par exemple. Si vous avez sous-dossiers sous votre chemin d'images, va-t-il également les mettre en cache? – StuffandBlah

61

Vous pouvez le faire sur une base par fichier. Utilisez le chemin attribut pour inclure le nom du fichier

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <location path="YourFileNameHere.xml"> 
     <system.webServer> 
      <staticContent> 
       <clientCache cacheControlMode="DisableCache" /> 
      </staticContent> 
     </system.webServer> 
    </location> 
</configuration> 
+1

Et si vous souhaitez l'appliquer à tous les fichiers d'une extension spécifique? est-ce que .xml ou * .xml fonctionneraient seuls? – Zulgrib

+1

@Zulgrib pour l'appliquer à une extension spécifique, vous pouvez utiliser les règles de réécriture sortantes: http://stackoverflow.com/questions/32987486/iis-setting-cache-control-header-per-file-type/33444897#33444897 – jotap

-1

J'ai eu le même issue.For moi, le problème était de savoir comment configurer une limite de cache à images.And je suis tombé sur ce site qui a donné un aperçu de la procédure sur la façon le problème peut être géré.Espérons que cela sera utile pour vous aussi Lien: [https://varvy.com/pagespeed/cache-control.html]

+1

S'il vous plaît Pensez à ajouter des informations à partir du lien vers votre réponse sur https://stackoverflow.com/help/how-to-answer: Les liens vers des ressources externes sont encouragés, mais veuillez ajouter un contexte autour du lien afin que vos collègues utilisateurs aient une idée ce que c'est et pourquoi c'est là. Toujours citer la partie la plus pertinente d'un lien important, dans le cas où le site cible est inaccessible ou va définitivement hors ligne. –

Questions connexes