TOC

This article has been localized into German by the community.

Cachen:

ResponseCache

Wie wir im Einführungsartikel zu diesem Kapitel besprochen haben, sind in allen modernen Browsern zahlreiche Caching-Funktionen integriert. Sie werden immer versuchen, statische Inhalte wie Bilder und Stylesheets zu erkennen und für die nächste Anforderung des Benutzers zwischenzuspeichern. Dies gilt jedoch nicht für die eigentliche Seite, da der Browser nicht weiß, ob Ihr Server bei der nächsten Anforderung genau die gleiche Antwort liefert oder nicht. Das bedeutet nicht, dass das Zwischenspeichern der Seite nicht möglich ist, sondern nur, dass Sie den Browser anleiten müssen. Zu diesem Zweck wird ASP.NET MVC mit einer Technik namens ResponseCache ausgeliefert.

ResponseCache, manchmal auch als HTTP-basiertes Antwort-Caching bezeichnet, wird am häufigsten direkt auf die Aktion eines Controllers angewendet, um den Browser darauf hinzuweisen, dass die Antwort für einen bestimmten Zeitraum sicher zwischengespeichert werden kann. Wenn das Ergebnis Ihrer Controller-Aktion immer statisch ist oder zumindest eine bestimmte Zeit lang gleich bleibt, können Sie den Browser anweisen, sie wie folgt zwischenzuspeichern:

public class CacheController : Controller  
{  
    [ResponseCache(Duration = 120)]  
    public IActionResult Index()  
    {      
return View();  
    }  
}

Mit dieser Option erhält der Browser der die Seite anfordert die Berechtigung, die Antwort der Anforderung für 2 Minuten (120 Sekunden) zwischenzuspeichern. Dies macht sich in den Antwort-Headern bemerkbar, die Sie in den Entwicklertools Ihres Browsers (z. B. DevTools in Google Chrome) anzeigen können. Dort sehen Sie einen Antwort-Header wie diesen:

Cache-Control: public,max-age=120

Beachten Sie jedoch Folgendes: Dies ist nur eine Empfehlung an den Browser. Der Browser kann diese Empfehlung jederzeit ignorieren und die Seite erneut anfordern. Dies kann beispielsweise der Fall sein, wenn der Benutzer die Schaltfläche Aktualisieren des Browsers drückt, anstatt einfach durch Klicken auf einen Link zur zwischengespeicherten Seite zu navigieren.

Optionen variieren

Im obigen Beispiel wird die Seite in jedem Fall zwischengespeichert. In vielen Situationen kann sich Ihre Seite jedoch ändern, je nachdem, wie der Benutzer darauf zugreift. Beispielsweise können Sie Parameter in der Abfragezeichenfolge verwenden, um unterschiedliche Inhalte bereitzustellen, je nachdem, wie der Benutzer dies anfordert.

/Users/Details?id=1
/Users/Details?id=2
....

In einer solchen Situation möchten Sie sicherstellen, dass die Detailseite für Benutzer 1 nicht zwischengespeichert und für Benutzer 2 angezeigt wird. Glücklicherweise enthält die ResponseCache-Direktive Optionen zum Variieren des Inhalts basierend auf der Abfragezeichenfolge, erfordert jedoch die sogenannte ResponseCache-Middleware. Mit anderen Worten, Sie müssen dieses NuGet-Paket zu Ihrem Projekt hinzufügen und es dann in Ihrer Startup.cs Datei referenzieren, in der Sie auch Codezeilen hinzufügen müssen:

    public class Startup
    {
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();    
    services.AddMvc();    
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
app.UseDeveloperExceptionPage();
    }
    app.UseResponseCaching();    
    app.UseMvcWithDefaultRoute();
}
    }

Es handelt sich um Zeilen mit services.AddResponseCaching() und app.UseResponseCaching(). Damit können Sie jetzt den Parameter VaryByQueryKeys verwenden:

[ResponseCache(Duration = 120, VaryByQueryKeys = new[] { "id" })]      
public IActionResult Details(int id)  
{      
...

Jetzt wird die angeforderte Seite nur zwischengespeichert, wenn der ID-Parameter identisch ist. Sie können mehrere Parameter angeben, um diese zu variieren, oder Sie können das Sternchen verwenden, um alle möglichen Parameter zu variieren:

[ResponseCache(Duration = 120, VaryByQueryKeys = new[] { "*" })]        

Header variieren

Sie können den Inhalt auch basierend auf den vom Client an den Server gesendeten Headern variieren, z.B.: "User-Agent", der einen Client (einen Webbrowser) identifiziert. Es kann so verwendet werden:

[ResponseCache(Duration = 120, VaryByHeader = "User-Agent" )]

Zusammenfassung

Mit der ResponseCache -Direktive können Sie den besuchenden Client anweisen, wie er Ihre Seiten zwischenspeichern kann oder nicht. Bedenken Sie jedoch, dass, solange dies nur eine Empfehlung für jeden Kunden ist, die eingesparten Ressourcen und die Bandbreite nicht so groß sind, als ob Sie die volle Kontrolle hätten. Wir werden im nächsten Artikel mehr darüber sprechen.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!