Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

138
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!