Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Av John Luo och Rick Anderson
I den här artikeln beskrivs hur du konfigurerar cachelagring av svarsmellanprogram i en ASP.NET Core-app. Mellanprogrammet avgör när svar kan cachelagrats, lagrar svar och hanterar svar från cacheminnet. En introduktion till HTTP-cachelagring och [ResponseCache] attributet finns i Svarscachelagring.
Mellanprogrammet För cachelagring av svar:
- Aktiverar cachelagring av serversvar baserat på HTTP-cachehuvuden. Implementerar standard-HTTP-cachelagringssemantik. Cacheminnen baserade på HTTP-cachehuvuden som proxyservrar gör.
- Är vanligtvis inte fördelaktigt för användargränssnittsappar som Razor Pages eftersom webbläsare vanligtvis anger begärandehuvuden som förhindrar cachelagring. Cachelagring av utdata, som är tillgängligt i .NET 7 eller senare, gynnar användargränssnittsappar. Med cachelagring av utdata bestämmer konfigurationen vad som ska cachelagras oberoende av HTTP-huvuden.
- Kan vara fördelaktigt för offentliga GET- eller HEAD API-begäranden från klienter där villkor för cachelagring uppfylls.
Om du vill testa cachelagring av svar använder du Fiddlereller ett annat verktyg som uttryckligen kan ange begärandehuvuden. Att ange rubriker uttryckligen är att föredra för testning av cachelagring. Mer information finns i Felsökning.
Configuration
I Program.cslägger du till tjänsten Response Caching Middleware AddResponseCaching i tjänstsamlingen och konfigurerar appen så att den använder mellanprogrammet med UseResponseCaching tilläggsmetoden. 
              UseResponseCaching lägger till mellanprogrammet i pipelinen för bearbetning av begäranden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCaching();
var app = builder.Build();
app.UseHttpsRedirection();
// UseCors must be called before UseResponseCaching
//app.UseCors();
app.UseResponseCaching();
Warning
UseCors måste anropas innan UseResponseCaching du använder CORS-mellanprogram.
Exempelappen lägger till rubriker för att styra cachelagring vid efterföljande begäranden:
- Cache-Control: Cachelagrar cachebara svar i upp till 10 sekunder.
- Variera: Konfigurerar mellanprogrammet för att endast hantera ett cachelagrat svar om rubriken Accept-Encoding för efterföljande begäranden matchar den ursprungliga begäran.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCaching();
var app = builder.Build();
app.UseHttpsRedirection();
// UseCors must be called before UseResponseCaching
//app.UseCors();
app.UseResponseCaching();
app.Use(async (context, next) =>
{
    context.Response.GetTypedHeaders().CacheControl =
        new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(10)
        };
    context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
        new string[] { "Accept-Encoding" };
    await next();
});
app.MapGet("/", () => DateTime.Now.Millisecond);
app.Run();
Föregående rubriker skrivs inte till svaret och åsidosätts när en kontroller, åtgärd eller Razor Sida:
- Har ett [ResponseCache]- attribut. Detta gäller även om en egenskap inte har angetts. Om du till exempel utelämnar egenskapen VaryByHeader tas motsvarande rubrik bort från svaret.
Response Caching Middleware cachelagrar endast serversvar som resulterar i statuskoden 200 (OK). Andra svar, inklusive felsidor, ignoreras av mellanprogrammet.
Warning
Svar som innehåller innehåll för autentiserade klienter måste markeras som inte cachebara för att förhindra att mellanprogrammet lagrar och hanterar dessa svar. Mer information om hur mellanprogrammet avgör om ett svar kan cachelagras finns i Villkor för cachelagring .
Föregående kod returnerar vanligtvis inte ett cachelagrat värde till en webbläsare. Använd Fiddler eller ett annat verktyg som uttryckligen kan ange begärandehuvuden och som rekommenderas för testning av cachelagring. Mer information finns i Felsökning i den här artikeln.
Options
Alternativ för cachelagring av svar visas i följande tabell.
| Option | Description | 
|---|---|
| MaximumBodySize | Den största cachebara storleken för svarstexten i byte. Standardvärdet är 64 * 1024 * 1024(64 MB). | 
| SizeLimit | Storleksgränsen för svarscache-mellanmjukvaran i byte. Standardvärdet är 100 * 1024 * 1024(100 MB). | 
| UseCaseSensitivePaths | Avgöra huruvida svar cachelagras på skiftlägeskänsliga sökvägar. Standardvärdet är false. | 
I följande exempel konfigureras mellanprogrammet till:
- Cachesvar med en brödtextstorlek som är mindre än eller lika med 1 024 byte.
- Lagra svaren efter skiftlägeskänsliga sökvägar. Till exempel /page1och/Page1lagras separat.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCaching(options =>
{
    options.MaximumBodySize = 1024;
    options.UseCaseSensitivePaths = true;
});
var app = builder.Build();
app.UseHttpsRedirection();
// UseCors must be called before UseResponseCaching
//app.UseCors();
app.UseResponseCaching();
app.Use(async (context, next) =>
{
    context.Response.GetTypedHeaders().CacheControl =
        new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(10)
        };
    context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
        new string[] { "Accept-Encoding" };
    await next(context);
});
app.MapGet("/", () => DateTime.Now.Millisecond);
app.Run();
VaryByQueryKeys
När du använder MVC, webb-API-kontroller eller sidmodeller för Razor sidor, specificerar [ResponseCache] attributet de parametrar som krävs för att ställa in lämpliga huvuden för cachelagring av svar. Den enda parametern för [ResponseCache] attributet som strikt kräver mellanprogrammet är VaryByQueryKeys, vilket inte motsvarar ett faktiskt HTTP-huvud. För mer information, se Cachning av svar i ASP.NET Core.
Om du inte använder [ResponseCache]-attributet, kan cachelagring varieras med VaryByQueryKeys. Använd ResponseCachingFeature direkt från HttpContext.Features.
var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();
if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}
Om du använder ett enda värde som är lika med * i VaryByQueryKeys varierar cachen efter alla frågeparametrar för begäran.
HTTP-huvuden som används av mellanprogram för cachelagring av svar
Följande tabell innehåller information om HTTP-huvuden som påverkar cachelagring av svar.
| Header | Details | 
|---|---|
| Authorization | Svaret cachelagras inte om headern finns. | 
| Cache-Control | Mellanprogrammet tar endast hänsyn till cachelagringssvar som markerats med publiccachedirektivet. Kontrollera cachelagring med följande parametrar:
 max-stalevidtar mellanprogrammet ingen åtgärd.proxy-revalidate‡ har samma effekt sommust-revalidate.Mer information finns i RFC 9111: Begärandedirektiv. | 
| Pragma | En Pragma: no-cacherubrik i begäran ger samma effekt somCache-Control: no-cache. Den här rubriken åsidosätts av relevanta direktiv iCache-Control-rubriken, om den finns. Beaktas för bakåtkompatibilitet med HTTP/1.0. | 
| Set-Cookie | Svaret cachelagras inte om headern finns. Alla mellanprogramvara i begärandebehandlingspipeline som anger en eller flera cookies förhindrar att mellanprogramvara för svarscachelagring cachelagrar svaret (till exempel den cookie-baserade TempData-leverantören). | 
| Vary | Rubriken Varyanvänds för att variera det cachelagrade svaret med en annan rubrik. Till exempel cachelagrar du svar genom att koda genom att inkluderaVary: Accept-Encodingrubriken, som cachelagrar svar för begäranden med rubrikerAccept-Encoding: gzipochAccept-Encoding: text/plainseparat. Ett svar med huvudvärdet*lagras aldrig. | 
| Expires | Ett svar som anses inaktuellt enligt denna rubrik ( Cache-Control) lagras eller hämtas endast om det åsidosätts av andra rubriker. | 
| If-None-Match | Det fullständiga svaret hanteras från cacheminnet om värdet inte är *ochETagav svaret inte matchar något av de angivna värdena. Annars returneras ett 304-svar (inte ändrad). | 
| If-Modified-Since | If-None-MatchOm rubriken inte finns, serveras ett fullständigt svar från cacheminnet om det cachelagrade svarsdatumet är nyare än det angivna värdet. I annat fall hanteras svaret 304 – Inte ändrad . | 
| Date | När du serverar från cachen ställs Date-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret. | 
| Content-Length | När du serverar från cachen ställs Content-Length-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret. | 
| Age | Det headern Agesom skickades i det ursprungliga svaret ignoreras. Mellanprogrammet beräknar ett nytt värde när du hanterar ett cachelagrat svar. | 
Cachelagring respekterar begäran Cache-Control direktiv
Mellanprogrammet respekterar reglerna för RFC 9111: HTTP-cachelagring (avsnitt 5.2. Cache-Control). Reglerna kräver en cache för att uppfylla ett giltigt Cache-Control huvud som skickas av klienten. Enligt specifikationen kan en klient göra begäranden med ett no-cache huvudvärde och tvinga servern att generera ett nytt svar för varje begäran. För närvarande finns det ingen utvecklarkontroll över det här cachelagringsbeteendet när du använder mellanprogrammet eftersom mellanprogrammet följer den officiella cachelagringsspecifikationen.
Mer kontroll över cachelagringsbeteende finns i andra cachelagringsfunktioner i ASP.NET Core. Se följande avsnitt:
- Cache i minnet i ASP.NET Core
- Distribuerad cachelagring i ASP.NET Core
- Hjälp för cachetaggen i ASP.NET Core MVC
- Tagghjälparen för distribuerad cache i ASP.NET Core
Troubleshooting
              Mellanprogrammet för svarscachelagring använder IMemoryCache, som har en begränsad kapacitet. När kapaciteten överskrids komprimeras minnescachen (TriggerOvercapacityCompaction).
Note
Dokumentationslänkar till .NET-referenskällan läser vanligtvis in lagringsplatsens standardgren, vilket representerar den aktuella utvecklingen för nästa version av .NET. Om du vill välja en tagg för en specifik version använder du listrutan Välj bland grenar eller taggar. Mer information finns i Så här väljer du en versionstagg för ASP.NET Core-källkod (dotnet/AspNetCore.Docs #26205).
Om cachelagringsbeteendet inte är som förväntat kontrollerar du att svaren kan cachelagras och kan hanteras från cachen. Granska begärans inkommande huvuden och svarets utgående huvuden. Aktivera loggning för att hjälpa till med felsökning.
När du testar och felsöker cachelagringsbeteendet anger en webbläsare vanligtvis begärandehuvuden som förhindrar cachelagring. En webbläsare kan till exempel ange Cache-Control rubriken till no-cache eller max-age=0 när en sida uppdateras. 
              Fiddler och andra verktyg kan uttryckligen ange begärandehuvuden och rekommenderas för testning av cachelagring.
Villkor för cachelagring
- Begäran måste resultera i ett serversvar med statuskoden 200 (OK).
- Begärandemetoden måste vara GET eller HEAD.
- Mellanprogram för cachelagring av svar måste placeras före mellanprogram som kräver cachelagring. Mer information finns i ASP.NET Core Middleware.
- Rubriken Authorizationfår inte finnas.
- 
              Cache-Controlhuvudparametrarna måste vara giltiga och svaret måste vara markeratpublicoch inte markeratprivate.
- Rubriken Pragma: no-cachefår inte finnas om rubrikenCache-Controlinte finns, eftersom rubrikenCache-Controlåsidosätter rubrikenPragmanär den finns.
- Rubriken Set-Cookiefår inte finnas.
- 
              Varyhuvudparametrarna måste vara giltiga och inte lika med*.
- Rubrikvärdet Content-Length(om det anges) måste matcha storleken på svarstexten.
- Används IHttpSendFileFeature inte.
- Svaret får inte vara inaktuellt enligt huvud Expiresoch cachedirektivenmax-ageochs-maxage.
- Buffring av svar måste lyckas. Svarets storlek måste vara mindre än den konfigurerade eller standardmässiga SizeLimit. Brödtextstorleken för svaret måste vara mindre än den konfigurerade eller standardmässiga MaximumBodySize.
- Svaret måste vara cachelagrat enligt RFC 9111: HTTP-cachelagring. Direktivet får till exempel inte finnas i fälten no-storeför begärande- eller svarshuvud. Mer information finns i RFC 9111: HTTP-cachelagring (avsnitt 3: Lagra svar i cacheminnen .
Note
Antiförfalskningssystemet för att generera säkra tokens för att förhindra CSRF-attacker (Cross-Site Request Forgery) ställer in Cache-Control och Pragma huvudena till no-cache så att svar inte cachelagras. Information om hur du inaktiverar antiforgery-token för HTML-formulärelement finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core.
Ytterligare resurser
- Visa eller ladda ned exempelkod (hur du laddar ned)
- 
              GitHub-källa för IResponseCachingPolicyProvider
- 
              GitHub-källa för IResponseCachingPolicyProvider
- Start av applikation i ASP.NET Core
- ASP.NET Core Middleware
- Cache i minnet i ASP.NET Core
- Distribuerad cachelagring i ASP.NET Core
- Identifiera ändringar med ändringstoken i ASP.NET Core
- Cachelagring av svar i ASP.NET Core
- Hjälp för cachetaggen i ASP.NET Core MVC
- Tagghjälparen för distribuerad cache i ASP.NET Core
I den här artikeln beskrivs hur du konfigurerar mellanprogram för svarscachelagring i en ASP.NET Core-app. Mellanprogrammet avgör när svar kan cachelagrats, lagrar svar och hanterar svar från cacheminnet. En introduktion till HTTP-cachelagring och [ResponseCache] attributet finns i Svarscachelagring.
Visa eller ladda ned exempelkod (hur du laddar ned)
Configuration
Response Caching Middleware är implicit tillgängligt för ASP.NET Core-applikationer via det gemensamma ramverket.
I Startup.ConfigureServiceslägger du till mellanprogrammet För cachelagring av svar i tjänstsamlingen:
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();
    services.AddRazorPages();
}
Konfigurera appen så att den använder mellanprogrammet med UseResponseCaching tilläggsmetoden, som lägger till mellanprogrammet i pipelinen för bearbetning av begäran i Startup.Configure:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }
    app.UseStaticFiles();
    app.UseRouting();
    // UseCors must be called before UseResponseCaching
    // app.UseCors("myAllowSpecificOrigins");
    app.UseResponseCaching();
    app.Use(async (context, next) =>
    {
        context.Response.GetTypedHeaders().CacheControl = 
            new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
            {
                Public = true,
                MaxAge = TimeSpan.FromSeconds(10)
            };
        context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] = 
            new string[] { "Accept-Encoding" };
        await next();
    });
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}
Warning
UseCors måste anropas innan UseResponseCaching du använder CORS-mellanprogram.
Exempelappen lägger till rubriker för att styra cachelagring vid efterföljande begäranden:
- Cache-Control: Cachelagrar cachebara svar i upp till 10 sekunder.
- Variera: Konfigurerar mellanprogrammet för att endast hantera ett cachelagrat svar om rubriken Accept-Encoding för efterföljande begäranden matchar den ursprungliga begäran.
// using Microsoft.AspNetCore.Http;
app.Use(async (context, next) =>
{
    context.Response.GetTypedHeaders().CacheControl = 
        new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(10)
        };
    context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] = 
        new string[] { "Accept-Encoding" };
    await next();
});
Föregående rubriker skrivs inte till svaret och åsidosätts när en kontroller, åtgärd eller Razor Sida:
- Har ett [ResponseCache]- attribut. Detta gäller även om en egenskap inte har angetts. Om du till exempel utelämnar egenskapen VaryByHeader tas motsvarande rubrik bort från svaret.
Response Caching Middleware cachelagrar endast serversvar som resulterar i statuskoden 200 (OK). Andra svar, inklusive felsidor, ignoreras av mellanprogrammet.
Warning
Svar som innehåller innehåll för autentiserade klienter måste markeras som inte cachebara för att förhindra att mellanprogrammet lagrar och hanterar dessa svar. Mer information om hur mellanprogrammet avgör om ett svar kan cachelagras finns i Villkor för cachelagring .
Options
Alternativ för cachelagring av svar visas i följande tabell.
| Option | Description | 
|---|---|
| MaximumBodySize | Den största cachebara storleken för svarstexten i byte. Standardvärdet är 64 * 1024 * 1024(64 MB). | 
| SizeLimit | Storleksgränsen för svarscache-mellanmjukvaran i byte. Standardvärdet är 100 * 1024 * 1024(100 MB). | 
| UseCaseSensitivePaths | Avgöra huruvida svar cachelagras på skiftlägeskänsliga sökvägar. Standardvärdet är false. | 
I följande exempel konfigureras mellanprogrammet till:
- Cachesvar med en brödtextstorlek som är mindre än eller lika med 1 024 byte.
- Lagra svaren efter skiftlägeskänsliga sökvägar. Till exempel /page1och/Page1lagras separat.
services.AddResponseCaching(options =>
{
    options.MaximumBodySize = 1024;
    options.UseCaseSensitivePaths = true;
});
VaryByQueryKeys
När du använder MVC/webb-API-kontrollanter eller Razor sidmodeller [ResponseCache] för sidor anger attributet de parametrar som krävs för att ange lämpliga rubriker för cachelagring av svar. Den enda parametern för [ResponseCache] attributet som strikt kräver mellanprogrammet är VaryByQueryKeys, vilket inte motsvarar ett faktiskt HTTP-huvud. För mer information, se Cachning av svar i ASP.NET Core.
Om du inte använder [ResponseCache]-attributet, kan cachelagring varieras med VaryByQueryKeys. Använd ResponseCachingFeature direkt från HttpContext.Features.
var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();
if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}
Om du använder ett enda värde som är lika med * i VaryByQueryKeys varierar cachen efter alla frågeparametrar för begäran.
HTTP-huvuden som används av mellanprogram för cachelagring av svar
Följande tabell innehåller information om HTTP-huvuden som påverkar cachelagring av svar.
| Header | Details | 
|---|---|
| Authorization | Svaret cachelagras inte om headern finns. | 
| Cache-Control | Mellanprogrammet tar endast hänsyn till cachelagringssvar som markerats med publiccachedirektivet. Kontrollera cachelagring med följande parametrar:
 max-stalevidtar mellanprogrammet ingen åtgärd.proxy-revalidate‡ har samma effekt sommust-revalidate.Mer information finns i RFC 9111: Begärandedirektiv. | 
| Pragma | En Pragma: no-cacherubrik i begäran ger samma effekt somCache-Control: no-cache. Den här rubriken åsidosätts av relevanta direktiv iCache-Control-rubriken, om den finns. Beaktas för bakåtkompatibilitet med HTTP/1.0. | 
| Set-Cookie | Svaret cachelagras inte om headern finns. Alla mellanprogramvara i begärandebehandlingspipeline som anger en eller flera cookies förhindrar att mellanprogramvara för svarscachelagring cachelagrar svaret (till exempel den cookie-baserade TempData-leverantören). | 
| Vary | Rubriken Varyanvänds för att variera det cachelagrade svaret med en annan rubrik. Till exempel cachelagrar du svar genom att koda genom att inkluderaVary: Accept-Encodingrubriken, som cachelagrar svar för begäranden med rubrikerAccept-Encoding: gzipochAccept-Encoding: text/plainseparat. Ett svar med huvudvärdet*lagras aldrig. | 
| Expires | Ett svar som anses inaktuellt enligt denna rubrik ( Cache-Control) lagras eller hämtas endast om det åsidosätts av andra rubriker. | 
| If-None-Match | Det fullständiga svaret hanteras från cacheminnet om värdet inte är *ochETagav svaret inte matchar något av de angivna värdena. Annars returneras ett 304-svar (inte ändrad). | 
| If-Modified-Since | If-None-MatchOm rubriken inte finns, serveras ett fullständigt svar från cacheminnet om det cachelagrade svarsdatumet är nyare än det angivna värdet. I annat fall hanteras svaret 304 – Inte ändrad . | 
| Date | När du serverar från cachen ställs Date-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret. | 
| Content-Length | När du serverar från cachen ställs Content-Length-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret. | 
| Age | Det headern Agesom skickades i det ursprungliga svaret ignoreras. Mellanprogrammet beräknar ett nytt värde när du hanterar ett cachelagrat svar. | 
Cachelagring respekterar begäran Cache-Control direktiv
Mellanprogrammet respekterar reglerna för RFC 9111: HTTP-cachelagring (avsnitt 5.2. Cache-Control). Reglerna kräver en cache för att uppfylla ett giltigt Cache-Control huvud som skickas av klienten. Enligt specifikationen kan en klient göra begäranden med ett no-cache huvudvärde och tvinga servern att generera ett nytt svar för varje begäran. För närvarande finns det ingen utvecklarkontroll över det här cachelagringsbeteendet när du använder mellanprogrammet eftersom mellanprogrammet följer den officiella cachelagringsspecifikationen.
Mer kontroll över cachelagringsbeteende finns i andra cachelagringsfunktioner i ASP.NET Core. Se följande avsnitt:
- Cache i minnet i ASP.NET Core
- Distribuerad cachelagring i ASP.NET Core
- Hjälp för cachetaggen i ASP.NET Core MVC
- Tagghjälparen för distribuerad cache i ASP.NET Core
Troubleshooting
Om cachelagringsbeteendet inte är som förväntat kontrollerar du att svaren kan cachelagras och kan hanteras från cachen. Granska begärans inkommande huvuden och svarets utgående huvuden. Aktivera loggning för att hjälpa till med felsökning.
När du testar och felsöker cachelagringsbeteendet kan en webbläsare ange begärandehuvuden som påverkar cachelagring på oönskade sätt. En webbläsare kan till exempel ange Cache-Control rubriken till no-cache eller max-age=0 när en sida uppdateras. Följande verktyg kan uttryckligen ange begärandehuvuden och rekommenderas för testning av cachelagring:
Villkor för cachelagring
- Begäran måste resultera i ett serversvar med statuskoden 200 (OK).
- Begärandemetoden måste vara GET eller HEAD.
- I Startup.Configuremåste mellanprogram för svarscachelagring placeras före mellanprogram som kräver cachelagring. Mer information finns i ASP.NET Core Middleware.
- Rubriken Authorizationfår inte finnas.
- 
              Cache-Controlhuvudparametrarna måste vara giltiga och svaret måste vara markeratpublicoch inte markeratprivate.
- Rubriken Pragma: no-cachefår inte finnas om rubrikenCache-Controlinte finns, eftersom rubrikenCache-Controlåsidosätter rubrikenPragmanär den finns.
- Rubriken Set-Cookiefår inte finnas.
- 
              Varyhuvudparametrarna måste vara giltiga och inte lika med*.
- Rubrikvärdet Content-Length(om det anges) måste matcha storleken på svarstexten.
- Används IHttpSendFileFeature inte.
- Svaret får inte vara inaktuellt enligt huvud Expiresoch cachedirektivenmax-ageochs-maxage.
- Buffring av svar måste lyckas. Svarets storlek måste vara mindre än den konfigurerade eller standardmässiga SizeLimit. Brödtextstorleken för svaret måste vara mindre än den konfigurerade eller standardmässiga MaximumBodySize.
- Svaret måste vara cachelagrat enligt RFC 9111: HTTP-cachelagring. Direktivet får till exempel inte finnas i fälten no-storeför begärande- eller svarshuvud. Mer information finns i RFC 9111: HTTP-cachelagring (avsnitt 3: Lagra svar i cacheminnen .
Note
Antiförfalskningssystemet för att generera säkra tokens för att förhindra CSRF-attacker (Cross-Site Request Forgery) ställer in Cache-Control och Pragma huvudena till no-cache så att svar inte cachelagras. Information om hur du inaktiverar antiforgery-token för HTML-formulärelement finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core.
Ytterligare resurser
- Start av applikation i ASP.NET Core
- ASP.NET Core Middleware
- Cache i minnet i ASP.NET Core
- Distribuerad cachelagring i ASP.NET Core
- Identifiera ändringar med ändringstoken i ASP.NET Core
- Cachelagring av svar i ASP.NET Core
- Hjälp för cachetaggen i ASP.NET Core MVC
- Tagghjälparen för distribuerad cache i ASP.NET Core
ASP.NET Core