IIS7 Cache-Control

Sto cercando di fare qualcosa che pensavo sarebbe abbastanza semplice. Ottieni IIS 7 per dire ai clienti che possono mettere in cache tutte le immagini sul mio sito per un certo periodo di tempo, diciamo 24 ore.

Ho provato il passaggio su http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx ma inutilmente. Ricevo ancora richieste al server con 304s restituiti.

Qualcuno ha un modo per farlo? Ho un sito graficamente intenso e i miei utenti vengono martellati (così come il mio server) ogni volta che richiedono una pagina. Le immagini sembrano avere “Cache-Control private, max-age = 3600” in Firebug ma il browser le sta ancora chiedendo quando preme F5.

Se si desidera impostare l’intestazione Cache-Control, non c’è nulla nell’interfaccia utente di IIS7 per farlo, purtroppo.

Tuttavia, è ansible eliminare questo web.config nella directory principale della cartella o del sito in cui si desidera impostarlo:

        

Ciò informsrà il cliente di memorizzare nella cache il contenuto per 7 giorni in quella cartella e in tutte le sottocartelle.

Puoi anche farlo modificando la metabase di IIS7 tramite appcmd.exe , in questo modo:

 \ Windows \ system32 \ inetsrv \ appcmd.exe 
   imposta config "Sito Web / cartella predefinito" 
   -sezione: system.webServer / staticContent 
   -clientCache.cacheControlMode: UseMaxAge

 \ Windows \ system32 \ inetsrv \ appcmd.exe 
   imposta config "Sito Web / cartella predefinito" 
   -sezione: system.webServer / staticContent 
   -clientCache.cacheControlMaxAge: "7.00: 00: 00"

Questo non è vero, Jeff.

È sufficiente selezionare una cartella all’interno dell’interfaccia utente di IIS 7 Manager (ad esempio, Immagini o eventi nella cartella Applicazione Web predefinita) e quindi fare clic su “Intestazioni di risposta HTTP”. Quindi fai clic su “Imposta intestazione comune ..” nel riquadro di destra e seleziona “Scadenza contenuto Web”. Qui puoi configurare facilmente un massimo di 24 ore scegliendo “Dopo:”, inserendo “24” nella casella di testo e scegliendo “Ore” nella casella combinata.

Il tuo primo paragrafo riguardante la voce web.config è corretto. Aggiungerei l’attributo cacheControlCustom per impostare l’intestazione del controllo della cache su “public” o su ciò che è necessario in quel caso.

Ovviamente è ansible ottenere lo stesso fornendo voci (o file) di web.conf secondo necessità.

Modifica: rimosso una frase confusa 🙂

Io uso questo

    

per memorizzare nella cache il contenuto statico per 500 giorni con l’intestazione di controllo della cache pubblica.

F5 Refresh ha la semantica di “per favore ricarica l’HTML attuale e le sue dipendenze dirette”. Quindi dovresti aspettarti di vedere qualsiasi risorsa imgs, css e js a cui fa riferimento il codice HTML, anch’esso recuperato. Naturalmente un 304 è una risposta accettabile a questo, ma l’aggiornamento F5 implica che il browser effettuerà la richiesta piuttosto che fare affidamento sul nuovo contenuto della cache.

Invece, prova semplicemente a navigare da qualche altra parte e poi a tornare indietro.

È ansible forzare l’aggiornamento, oltre un 304, tenendo premuto ctrl mentre si preme f5 nella maggior parte dei browser.

A complemento della risposta di Elmer, quando la mia modifica è stata annullata.

Per memorizzare nella cache il contenuto statico per 365 giorni con l’intestazione di controllo della cache pubblica , IIS può essere configurato con quanto segue

    

Questo si tradurrà in un’intestazione come questa:

 Cache-Control: public,max-age=31536000 

Si noti che il limite massimo è un delta in secondi, express da un numero intero a 32 bit come indicato in RFC 2616 Sezioni 14.9.3 e 14.9.4 . Questo rappresenta un valore massimo di 2 ^ 31 o 2.147.483.648 secondi (oltre 68 anni). Tuttavia, per garantire meglio la compatibilità tra client e server, adottiamo un massimo consigliato di 365 giorni (un anno).

Come menzionato in altre risposte, puoi utilizzare queste direttive anche sul web.config del tuo sito per tutti i contenuti statici. In alternativa, puoi usarlo solo per i contenuti in una posizione specifica (sul campione, 30 giorni di cache pubblica per i contenuti nella cartella “cdn”):

        

c’è un modo semplice: 1. utilizzando il sito web.config 2. nella sezione “staticContent” rimuovi il file specifico Estensione e aggiungi mimeMap 3. aggiungi “clientCache”