Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

144
Vistas
Los encabezados de control de caché no se envían en respuesta a pesar de estar configurados en el objeto de respuesta

Estoy tratando de establecer encabezados de caché en ASP.NET MVC Web API, pero la respuesta de IIS sugiere que se están ignorando los valores de CacheControl establecidos.

Mi suposición original era que estaba usando EnableCorsAttribute en System.Web.Http.Cors, que es necesario en este caso de uso. Sin embargo, incluso sin ese atributo, el encabezado de Cache-Control de respuesta sigue siendo 'privado'.

¿Hay algo que estoy haciendo mal aquí?

 // GET api/<version>/content // [EnableCors(origins: "*", headers: "*", methods: "*")] public HttpResponseMessage Get(HttpRequestMessage request) { int cacheMaxAgeSeconds; string cacheMaxAgeString = request.GetQueryString("cache-max-age") ?? request.GetQueryString("cache-max-age-seconds"); string rawUri = request.RequestUri.ToString(); try { cacheMaxAgeSeconds = cacheMaxAgeString == null ? Config.ApiCacheControlMaxSeconds : int.Parse(cacheMaxAgeString); } catch (Exception ex) { cacheMaxAgeSeconds = Config.ApiCacheControlMaxSeconds; //... } try { //... var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("...", Encoding.UTF8, "application/json") }; response.Headers.CacheControl = new CacheControlHeaderValue { Public = true, MaxAge = TimeSpan.FromSeconds(cacheMaxAgeSeconds) }; return response; } catch (Exception apiEx) { //... } }

Respuesta

 HTTP/1.1 200 OK Cache-Control: private Content-Type: application/json; charset=utf-8 Date: Thu, 23 Jul 2015 10:53:17 GMT Server: Microsoft-IIS/7.5 Set-Cookie: ASP.NET_SessionId=knjh4pncbrhad30kjykvwxyz; path=/; HttpOnly X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Content-Length: 2367 Connection: keep-alive
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El siguiente código establece "control de caché: público, edad máxima = 15" correctamente en la aplicación Vanilla WebApi (System.Web.Http 4.0.0.0). Entonces... probablemente no sea la propia WebApi la que cause el problema.

Es posible que tenga algo de magia en su proyecto que cambie la configuración de la memoria caché (piense en los filtros de acción globales o algo similar). O tal vez esté utilizando un proxy que reescribe los encabezados HTTP.

 public HttpResponseMessage Get() { var content = new JavaScriptSerializer().Serialize(new { foo = "bar" }); var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(content, Encoding.UTF8, "application/json") }; response.Headers.CacheControl = new CacheControlHeaderValue { Public = true, MaxAge = TimeSpan.FromSeconds(15) }; return response; } // returns in the response: "Cache-Control: public, max-age=15"
over 4 years ago · Santiago Trujillo Denunciar

0

La respuesta, habiendo recogido esto algunas semanas después:

El encabezado Cache-Control parece estar configurado como 'privado' cuando se ejecutan compilaciones de depuración . El problema desaparece cuando ejecuto una versión de lanzamiento.

over 4 years ago · Santiago Trujillo Denunciar

0

Para agregar otra cosa que puede causar esto:

Corres a través de una canalización de Owin.

En ese caso, debe configurar los encabezados en un middleware de Owin definido así:

 class MiddleWare : OwinMiddleware { public MiddleWare(OwinMiddleware next) : base(next) { } public override async Task Invoke(IOwinContext context) { context.Response.Headers["Cache-Control"] = "no-cache, no-store, must-revalidate"; context.Response.Headers["Pragma"] = "no-cache"; context.Response.Headers["Expires"] = "0"; await Next.Invoke(context); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda