netcore net cache aspnet asp asp.net asp.net-mvc caching http-headers outputcache

cache - Configuración de encabezados de almacenamiento en caché http y parámetros de servidor óptimos en ASP.Net MVC e IIS 7.5



memory cache net core (1)

No estoy seguro si ya resolvió este problema (varios meses después ...), pero debería ser posible.

SetMaxAge debe establecer la cantidad de tiempo fresco "garantizado". Si además envía un ETag, cumplirá con los requisitos 3 y 4. Los requisitos 1 y 2 se pueden resolver de forma ortogonal con cualquier mecanismo de almacenamiento en caché del lado del servidor que utilice: nunca he usado el caché del lado del servidor de ASP.NET de esta manera, pero Es casi seguro que es posible.

SetRevalidation encabezados extraños de sus respuestas, como SetRevalidation , ¿por qué sería necesario?

Tengo un sitio ASP.Net (resulta ser MVC, pero eso no es relevante aquí) con algunas páginas que me gustaría almacenar en caché realmente bien

Específicamente me gustaría lograr:

  1. Salida en caché en el servidor durante 2 horas.
  2. si el contenido del archivo en el servidor cambia, esa caché de salida debe vaciarse para esa página
  3. almacenado en caché en el navegador durante 10 minutos (es decir, ni siquiera pregunte al servidor si está nuevo)
  4. cuando el navegador realiza una solicitud posterior real, me gustaría usar etags, para que el servidor pueda devolver un 304 si no se modifica.

(nota: los valores de tiempo anteriores son solo ejemplos indicativos)

  • 1) y 2) Puedo lograr con Response.Cache.SetCacheability (HttpCacheability.Server)
  • Sé que 3) se puede lograr usando max-age y cache-control: private
  • Puedo emitir etags con Response.Cache.SetETagFromFileDependencies ();

pero parece que no puedo lograr que todas estas cosas trabajen juntas. Esto es lo que tengo:

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

¿Es posible el escenario que quiero? En particular:

  • ¿Pueden los navegadores hacer tanto 3) como 4) así? Cuando Firefox emite una nueva solicitud después de que caduque en el caché local, sí envía la etiqueta etag con la que el servidor respondió antes, pero recibí una respuesta de 200.
  • configurando las variables como arriba, ¿dónde establecería la duración del almacenamiento en caché de salida?

Gracias por cualquier consejo!