2009-06-03 21 views
26

Estoy tratando de establecer los encabezados de control de caché para una aplicación web (y parece que soy capaz de hacerlo), pero obtengo lo que creo que son entradas impares en las respuestas del encabezado. Mi aplicación es el siguiente:Encabezados de control de caché en 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); 
    } 

Y esto es lo que las respuestas muestran cabecera:

----- 
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. ¿Por qué el "Cache-Control" mostrar la propiedad dos veces?
  2. ¿Necesito las propiedades "Cache-Control" y "Expira"?
  3. ¿Es "Page_Load" el mejor lugar para poner este código?

¡Gracias!

Respuesta

12

No veo que el control de caché aparezca dos veces. Uno está en la solicitud, uno está en la respuesta. El que está en la solicitud probablemente sea porque presionas Shift + F5 en el navegador o algo similar.

Para su segunda pregunta: eso depende de lo que quiere lograr con los encabezados de la caché.

No sé lo que quería lograr con el máximo de edad. El valor es demasiado alto ya que convirtió el DateTime incorrectamente en un TimeSpan. ¿Por qué no usas TimeSpan.FromMinutes en su lugar?

La carga de la página está bien. Usualmente juego con encabezados HTTP allí.

21

También puede ser que desee agregar esta línea si se está ajustando el máximo de edad tan lejos:

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

hago un montón de manip cabecera de respuesta con documentos e imágenes desde un manejador de archivo que procesa las solicitudes de los archivos se guardan en la base de datos.

Dependiendo de su objetivo, realmente puede forzar a los navegadores la memoria caché de casi todas sus páginas durante días a nivel local (si eso es lo que quiere/necesita).

edición:

También creo que es posible que se fija la edad máxima mal ...

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

este conjunto es la línea a 30 min de tiempo de caché en el navegador local de [max-age = 1800 ]

En cuanto a las 2x líneas de Control de caché ... es posible que desee comprobar si IIS se ha configurado para agregar el encabezado automáticamente.

+1

Tuve el mismo problema, y ​​en IIS puede establecer los encabezados de la caché de forma granular, por lo que para todo el sitio, para una carpeta o para archivos individuales. Si desea aún más control en IIS (6), también debería consultar el editor de Metabase. – Gyuri

Cuestiones relacionadas