2010-04-09 24 views
46

Ya estoy usando el almacenamiento en caché de salida en mi aplicación ASP.NET MVC.Cómo especificar el encabezado de caducidad de HTTP? (ASP.NET MVC + IIS)

Page speed me indica que especifique la caducidad del caché HTTP para css e imágenes en el encabezado de respuesta.

Sé que el objeto Response contiene algunas propiedades que controlan el vencimiento de la caché. Sé que estas propiedades se pueden utilizar para controlar el almacenamiento en caché HTTP para la respuesta que estoy porción de mi código:

Response.Expires 
Response.ExpiresAbsolute 
Response.CacheControl 

o alternativamente

Response.AddHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT"); 

La pregunta es cómo fijo el Expira encabezado para los recursos que se sirven automáticamente, por ejemplo imágenes, css y tal?

+0

que versión de IIS? –

+0

IIS 7 ... pero es posible que no tenga acceso a todas las configuraciones en IIS, este sitio está alojado en – Marek

Respuesta

74

lo encontró:

necesito especificar caché del cliente para el contenido estático (en web.config).

<configuration> 
    <system.webServer> 
    <staticContent> 
     <clientCache cacheControlCustom="public" 
     cacheControlMaxAge="12:00:00" cacheControlMode="UseMaxAge" /> 
    </staticContent> 
    </system.webServer> 
</configuration> 

de http://www.iis.net/ConfigReference/system.webServer/staticContent/clientCache

+0

¿En qué se diferencia esto de establecer una fecha futura de vencimiento en IIS? – leora

+3

no estoy seguro de si hay alguna diferencia - no dude en comprobar las diferencias en el tráfico HTTP :) El enfoque mencionado tiene la ventaja de que es posible alterar el comportamiento de almacenamiento en caché sin configurar IIS (por ejemplo, en alojamiento compartido) – Marek

+1

¿Funciona? usando IIS 6 en su lugar? – Jose3d

2

Mira mini static content delivery proyecto. :)

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/19021525) –

27

Si desea hacerlo a partir de código para un recurso que usted está volviendo (. Es decir, no un archivo estático que se sirve de IIS), es mejor usar Response.Cache:

Response.Cache.SetExpires(DateTime.Now.AddYears(1)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 

Sé que eso no es exactamente lo que estás pidiendo, pero encontré esta pregunta a través de Google e imagino que a otros podría gustarles esta respuesta, ya que está relacionada con las API que muestras en el texto original de la pregunta.

+2

¿No debería ser DateTime.UtcNow? Si no, ¿puede explicar cómo sabe el navegador cuál es la hora local del servidor? (Actualización: en realidad http://stackoverflow.com/questions/4849744/should-i-use-datetime-now-or-datetime-utcnow-in-httpcookie-expires-and-httpcache responde a esta pregunta) –

+1

Buena pregunta. Como descubriste, no importa. –

Cuestiones relacionadas