2010-09-13 7 views
18

Ho un sito ASP.Net (capita di essere MVC, ma non è rilevante qui) con poche pagine che mi piacerebbe memorizzare nella cache davvero bene.Impostazione delle intestazioni della cache HTTP e dei parametri del server ottimali in ASP.Net MVC e IIS 7.5

In particolare mi piacerebbe realizzare:

  1. uscita nella cache sul server per 2 ore.
  2. se il contenuto del file sulle modifiche del server, che cache di output deve essere lavata per quella pagina
  3. nella cache del browser per 10 minuti (cioè non hanno nemmeno chiedere al server se è così fresco)
  4. quando il il browser fa una richiesta successiva effettiva, mi piacerebbe che utilizzasse gli etags, in modo che il server possa restituire un 304 se non modificato.

(nota - valori temporali sopra sono esempi indicativi solo)

  • 1) e 2) posso ottenere da Response.Cache.SetCacheability (HttpCacheability.Server)
  • so 3) può essere raggiunto usando max-age e cache-control: private
  • Posso emettere etags con Response.Cache.SetETagFromFileDependencies();

ma non riesco a ottenere tutte le di queste cose per lavorare insieme. Ecco cosa ho:

Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate); 
     Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     Response.Cache.SetETagFromFileDependencies(); 
     Response.Cache.SetValidUntilExpires(true); 
     Response.Cache.SetMaxAge(TimeSpan.FromSeconds(60 * 10)); 

È lo scenario che voglio possibile? In particolare:

  • i browser possono fare sia 3) sia 4) in questo modo? Quando Firefox emette una nuova richiesta dopo che scade nella cache locale, effettivamente invia l'etag con cui il server ha risposto prima, ma ottengo una risposta di 200.
  • impostazione delle variabili come sopra, dove dovrei impostare la durata della cache di output?

Grazie per eventuali suggerimenti!

+0

"Firefox ... invia effettivamente l'etag" - intendi in un * If-None-Match *? E in questo caso particolare, hai emesso l'ETag manualmente usando 'SetETagFromFileDependencies()'? – bzlm

+0

corretto e sì. – Nik

+0

In seguito, come è stato risolto? E come stava esattamente fallendo? – harpo

risposta

1

Non sono sicuro di aver ancora risolto questo problema (alcuni mesi dopo ...), ma questo dovrebbe essere possibile.

SetMaxAge dovrebbe impostare la quantità di tempo "garantito". Se invii inoltre un ETag, avrai soddisfatto 3 & 4. Requisiti 1 & 2 può essere risolto ortogonalmente con qualsiasi meccanismo di caching lato server che usi: Non ho mai usato la cache lato server ASP.NET come questa, ma è quasi certamente possibile.

Rimuoverei le intestazioni estranee dalle risposte come SetRevalidation - perché sarebbe necessario?

Problemi correlati