2016-06-08 4 views
4

Ein intermittierender Proxy verursachte, dass meine Seiten mit einer von mir bereitgestellten ASP.net-Core-Site zwischengespeichert wurden. Der Webserver puffert keine Seiten.Wie CSS-, JS- oder Bilddateien in den Kern von ASP.net cachen

habe ich Anfrage- und Antwort Caching jedes Caching dieser Proxy

zu verhindern verursacht wurde mein In Startup.cs

 app.UseStaticFiles(); 

     app.UseIdentity(); 

     app.Use(async (context, next) => 
     { 
      context.Response.Headers.Append("Cache-Control", "no-cache"); 
      context.Response.Headers.Append("Cache-Control", "private, no-store"); 
      context.Request.Headers.Append("Cache-Control", "no-cache"); 
      context.Request.Headers.Append("Cache-Control", "private, no-store"); 
      await next(); 
     }); 

ich in Fiedler diese keine Cache-Header zu meinen Seiten hinzugefügt wurden auch sehen können, wie zu Javascript-Dateien, CSS-Dateien und Bilddateien.

  1. Wie beschränke ich dies keine Caching-Header nur gelten mvc Seiten, so dass diese keine Cache-Header in Fiedler für nicht Seite Dateien wie js, css und Bilddateien ShowUp nicht ASP.NET

  2. Gibt es eine Möglichkeit, dass bei HTTP-Anfragen für css- und js-Dateien nicht geprüft wird, ob die Datei auf dem Server für jede Anfrage existiert, sondern nur die Browser-Version für das erste Holen dieser Dateien verwendet wird. Der Grund, warum ich frage, ist, dass ich bei Fiddler (1000 User) bei GFDs 404 Fehler für meine CSS-, JS- und Image-Dateien erhalte, so dass ich versuche, die Anzahl der Anfragen für diese Ressourcen zu begrenzen. Wenn die Anfragen erfolgreich sind (nicht unter Last), bekomme ich 304 Antworten (nicht modifiziert). Gibt es keine Möglichkeit, dem Browser mitzuteilen, dass er die Anforderung nicht zuerst ausführen und die lokale zwischengespeicherte Version verwenden soll?

+0

Ich bin nicht sicher, ob ich 2 verstehen). Kannst du den ersten Teil dieser Frage wiederholen? –

+0

Ich habe die Frage neu formuliert. – devc2

+0

Danke! Ich habe meine Antwort basierend auf der aktualisierten Frage aktualisiert. –

Antwort

1

Hier ist ein Ansatz, der für Sie arbeiten sollte. In diesem Beispiel werden css- und js-Dateien so festgelegt, dass sie für 7 Tage vom Browser zwischengespeichert werden, und legt fest, dass css, js und images keine Cache-Header haben. Eine andere Anmerkung, es ist nur notwendig, die Header der Cache-Kontrolle auf die Antwort ist Asp.NET Core.

 app.Use(async (context, next) => 
     { 
      string path = context.Request.Path; 

      if(path.EndsWith(".css") || path.EndsWith(".js")) { 

       //Set css and js files to be cached for 7 days 
       TimeSpan maxAge = new TimeSpan(7, 0, 0, 0);  //7 days 
       context.Response.Headers.Append("Cache-Control", "max-age="+ maxAge.TotalSeconds.ToString("0")); 

      } else if(path.EndsWith(".gif") || path.EndsWith(".jpg") || path.EndsWith(".png")) { 
       //custom headers for images goes here if needed 

      } else { 
       //Request for views fall here. 
       context.Response.Headers.Append("Cache-Control", "no-cache"); 
       context.Response.Headers.Append("Cache-Control", "private, no-store"); 

      } 
      await next(); 
     }); 
9
app.UseStaticFiles(new StaticFileOptions() 
{ 
    OnPrepareResponse = 
     r => 
     { 
      string path = r.File.PhysicalPath; 
      if (path.EndsWith(".css") || path.EndsWith(".js") || path.EndsWith(".gif") || path.EndsWith(".jpg") || path.EndsWith(".png") || path.EndsWith(".svg")) 
      { 
       TimeSpan maxAge = new TimeSpan(7, 0, 0, 0); 
       r.Context.Response.Headers.Append("Cache-Control", "max-age=" + maxAge.TotalSeconds.ToString("0")); 
      } 
     } 
}); 
Verwandte Themen