Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

139
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda