Comment configurer le cache de contenu statique par dossier et extension dans IIS7?

143

Je souhaite configurer des règles dans IIS7 pour la mise en cache de contenu statique dans mon site Web ASP.NET.

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

Cache client <clientCache>(IIS.NET)
Ajouter expire ou en-tête de contrôle du cache au contenu statique dans IIS (débordement de pile)

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

Par exemple, je peux avoir deux répertoires qui nécessitent des paramètres de cache séparés:

/static/images
/content/pdfs

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

Veuillez noter que je dois pouvoir le faire via web.configcar je n'ai pas accès à la console IIS.

Frankadelic
la source

Réponses:

217

Vous pouvez définir des en-têtes de cache spécifiques pour un dossier entier dans votre racine 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 les spécifier dans un web.configfichier 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 connais pas de mécanisme intégré pour cibler des types de fichiers spécifiques.

Kev
la source
1
Génial. Me recommanderiez-vous un livre sur IIS 7? J'aimerais en savoir plus sur ces choses. Merci.
vtortola
5
@vtortola - vous ne pouvez pas vous tromper avec le [kit de ressources IIS7] (: amazon.co.uk/dp/0735624410 ), c'est en fait très utile. Le livre Wrox Pro IIS7 n'est pas mal non plus. TBH J'ai principalement appris du site de référence de configuration IIS.NET: iis.net/ConfigReference et de fouiner sur le %systemroot%\system32\inetsrv\config\applicationhost.configfichier et ses amis.
Kev
7
Est-ce que quelqu'un sait si c'est récursif? Par exemple, si vous avez des sous-dossiers sous le chemin de vos images, les mettra-t-il également en cache?
StuffandBlah
1
Une chose à noter est que le navigateur semble voir le path=""comme sensible à la casse
Chris S
9
@StuffandBlah Oui, c'est récursif. Je l'ai juste essayé moi-même et IIS a appliqué les mêmes paramètres de contrôle de cache à toutes les demandes de fichiers dans les sous-dossiers du dossier que j'ai spécifié comme "emplacement".
Erik Öjebo
68

Vous pouvez le faire sur une base par fichier. Utilisez l'attribut path pour inclure le nom de fichier

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="YourFileNameHere.xml">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="DisableCache" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>
Jeff Cuscutis
la source
1
Et si vous souhaitez l'appliquer à tous les fichiers d'une extension spécifique? le .xml ou * .xml seul fonctionnerait-il?
Zulgrib
2
@Zulgrib pour l'appliquer à une extension spécifique, vous pouvez utiliser les règles de réécriture sortante: stackoverflow.com/questions/32987486/…
jotap
@Zulgrib Comment utilisons-nous la balise d'emplacement pour plusieurs fichiers mais pas tous les fichiers d'un même type. Par exemple, quelques fichiers jpg dans le dossier racine mais pas tous?
Rahatur
-2

J'ai eu le même problème. Pour moi, le problème était de savoir comment configurer une limite de cache pour les images. : [ https://varvy.com/pagespeed/cache-control.html]

Vikum Charuka Egodapitiya
la source
2
Veuillez envisager d'ajouter des informations à partir du lien vers votre réponse selon stackoverflow.com/help/how-to-answer : les liens vers des ressources externes sont encouragés, mais veuillez ajouter du contexte autour du lien afin que vos collègues utilisateurs aient une idée de ce que c'est et pourquoi il est là. Citez toujours la partie la plus pertinente d'un lien important, au cas où le site cible serait inaccessible ou serait définitivement hors ligne.
Greg the Incredulous