Come configurare la cache di contenuto statico per cartella ed estensione in IIS7?


143

Vorrei impostare le regole in IIS7 per la memorizzazione nella cache dei contenuti statici nel mio sito Web ASP.NET.

Ho visto questi articoli, che descrivono come farlo usando l' <clientCache />elemento in web.config:

Client Cache <clientCache>(IIS.NET)
Aggiungi Scade o Intestazione controllo cache al contenuto statico in IIS (StackTranslate.it)

Tuttavia, questa impostazione sembra applicarsi globalmente a tutto il contenuto statico. C'è un modo per farlo solo per determinate directory o estensioni?

Ad esempio, potrei avere due directory che richiedono impostazioni cache separate:

/static/images
/content/pdfs

E 'possibile impostare le regole per l'invio di intestazioni di cache ( max-age, expires, ecc) in base a estensioni e percorsi delle cartelle?

Nota, devo essere in grado di farlo tramite web.configperché non ho accesso alla console IIS.

Risposte:


217

Puoi impostare intestazioni cache specifiche per un'intera cartella nella tua radice 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>

Oppure puoi specificarli in un web.configfile nella cartella del contenuto:

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

Non sono a conoscenza di un meccanismo integrato per il targeting di tipi di file specifici.


1
Grande. Mi consiglieresti un libro su IIS 7? Mi piacerebbe conoscere queste cose. Grazie.
vtortola,

5
@vtortola - non puoi sbagliare con il [kit di risorse IIS7] (: amazon.co.uk/dp/0735624410 ), in realtà è abbastanza utile. Anche il libro Iro7 di Wrox Pro non è male. TBH Ho imparato principalmente dal sito di riferimento della configurazione di IIS.NET: iis.net/ConfigReference e dalla ricerca del %systemroot%\system32\inetsrv\config\applicationhost.configfile e degli amici correlati.
Kev

7
Qualcuno sa se questo è ricorsivo? ad es. Se hai sottocartelle sotto il tuo percorso di immagini, memorizzerà anche quelle nella cache?
StuffandBlah,

1
Una cosa da notare è che il browser sembra vedere la path=""distinzione tra maiuscole
Chris S

9
@StuffandBlah Sì, è ricorsivo. L'ho provato da solo e IIS ha applicato le stesse impostazioni di controllo della cache a tutte le richieste di file nelle sottocartelle della cartella che ho specificato come "posizione".
Erik Öjebo,

68

Puoi farlo in base al file. Utilizzare l'attributo path per includere il nome file

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

1
E se vuoi applicarlo a tutti i file di un'estensione specifica? funzionerebbe da solo .xml o * .xml?
Zulgrib,

2
@Zulgrib per applicarlo a un interno specifico è possibile utilizzare in uscita regole di riscrittura: stackoverflow.com/questions/32987486/...
jotap

@Zulgrib Come utilizziamo il tag location per più di un file ma non per tutti i file di un tipo. Ad esempio un paio di file jpg nella cartella principale ma non tutti?
Rahatur

-2

Ho avuto lo stesso problema. Per me il problema era come configurare un limite di cache per le immagini. Mi sono imbattuto in questo sito che ha fornito alcuni spunti sulla procedura su come gestire il problema. Spero che sia utile anche per te Link : [ https://varvy.com/pagespeed/cache-control.html]


2
Prendi in considerazione l'aggiunta di alcune informazioni dal link alla tua risposta secondo stackoverflow.com/help/how-to-answer : i link a risorse esterne sono incoraggiati, ma ti preghiamo di aggiungere un contesto attorno al link in modo che i tuoi colleghi utenti abbiano qualche idea di cosa si tratta e perché è lì. Cita sempre la parte più pertinente di un link importante, nel caso in cui il sito di destinazione non sia raggiungibile o sia permanentemente offline.
Greg l'incredibile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.