2009-06-03 8 views
26

Sto provando a impostare le intestazioni di controllo della cache per un'applicazione Web (e sembra che io sia in grado di farlo), ma sto ottenendo quelle che penso siano voci dispari in le risposte di intestazione. La mia applicazione è il seguente:Intestazioni di Cache-Control in ASP.NET

protected override void OnLoad(EventArgs e) 
    { 
     // Set Cacheability... 
     DateTime dt = DateTime.Now.AddMinutes(30); 
     Response.Cache.SetExpires(dt); 
     Response.Cache.SetMaxAge(new TimeSpan(dt.ToFileTime())); 

     // Complete OnLoad... 
     base.OnLoad(e); 
    } 

E questo è ciò che le risposte di intestazione mostrano:

----- 
GET /Pages/Login.aspx HTTP/1.1 
Host: localhost:1974 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
X-lori-time-1: 1244048076221 
Cache-Control: max-age=0 

HTTP/1.x 200 OK 
Server: ASP.NET Development Server/8.0.0.0 
Date: Wed, 03 Jun 2009 16:54:36 GMT 
X-AspNet-Version: 2.0.50727 
Content-Encoding: gzip 
Cache-Control: private, max-age=31536000 
Expires: Wed, 03 Jun 2009 17:24:36 GMT 
Content-Type: text/html; charset=utf-8 
Content-Length: 6385 
Connection: Close 
----- 
  1. Perché il "Cache-Control" proprietà presentarsi due volte?
  2. Sono necessarie entrambe le proprietà "Cache-Control" e "Expires"?
  3. "Page_Load" è il posto migliore in cui inserire questo codice?

Grazie!

risposta

12

Non vedo Cache-control che appare due volte. Uno è nella richiesta, uno è nella risposta. Quello nella richiesta è probabilmente perché hai premuto Maiusc + F5 nel browser o qualcosa di simile.

Alla seconda domanda: dipende da ciò che si desidera ottenere con le intestazioni della cache.

Non so cosa volessi ottenere con il max-age. Il valore è troppo alto da quando hai convertito il DateTime in modo errato in un TimeSpan. Perché non usi semplicemente TimeSpan.FromMinutes?

Il caricamento della pagina è corretto. Di solito giro con intestazioni HTTP lì.

21

Si potrebbe anche voler aggiungere questa linea se si sta configurando l'età massima che lontano:

// Summary: 
// Sets Cache-Control: public to specify that the response is cacheable 
// by clients and shared (proxy) caches.  
Response.Cache.SetCacheability(HttpCacheability.Public); 

faccio un sacco di risposta di intestazione manip con documenti e immagini da un gestore di file che elabora le richieste per i file vengono salvati nel DB.

A seconda del tuo obiettivo puoi davvero forzare i browser nella cache di quasi tutte le pagine per giorni a livello locale (se questo è ciò che vuoi/bisogno).

edit:

Penso anche che si potrebbe essere impostando l'età massima sbagliato ...

Response.Cache.SetMaxAge(new TimeSpan(dt.Ticks - DateTime.Now.Ticks)); 

questo set la linea è di 30 minuti il ​​tempo di cache sul browser locale [max-age = 1800 ]

Come per le linee di controllo della cache 2x ... è possibile controllare se IIS è stato impostato per aggiungere automaticamente l'intestazione.

+1

Ho avuto lo stesso problema e in IIS è possibile impostare le intestazioni della cache in modo un po 'granulare, quindi per l'intero sito, per una cartella o per singoli file. Se si desidera un controllo ancora maggiore in IIS (6), si consiglia di controllare anche l'editor di metabase. – Gyuri

Problemi correlati