ASP.NET Core'Önbelleğe Alma Ara Yazılımına yanıt ASP.NET Core

John Luo tarafından

Bu makalede, bir uygulamadaki Response Önbelleğe Alma Ara Yazılım'ın nasıl ASP.NET Core açıklanmıştır. Ara yazılım, yanıtların ne zaman önbelleğe alınabiliyor olduğunu belirler, yanıtları depolar ve önbellekten yanıtlar sağlar. HTTP önbelleğe alma ve özniteliğine giriş için [ResponseCache] bkz. Yanıt Önbelleğe Alma.

Örnek kodu görüntüleme veya indirme ( nasılindir)

Yapılandırma

Yanıt Önbelleğe Alma Ara Yazılım, paylaşılan çerçeve aracılığıyla ASP.NET Core uygulamalar için örtülü olarak kullanılabilir.

içinde Startup.ConfigureServices Response Önbelleğe Alma Ara Yazılım'ını hizmet koleksiyonuna ekleyin:

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();
    services.AddRazorPages();
}

Uygulamayı, içinde istek işleme işlem hattına ara yazılımı ekleyen uzantı yöntemiyle UseResponseCaching ara yazılımı kullanmak üzere Startup.Configure yapılandırma:

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();
    });
}

Uyarı

UseCorsCORS ara yazılımı UseResponseCaching kullanırken önce çağrılmaları gerekir.

Örnek uygulama, sonraki isteklerde önbelleğe almayı denetlemeye üst bilgiler ekler:

  • Önbellek Denetimi:Önbelleğe alınabilir yanıtları 10 saniyeye kadar önbelleğe alıyor.
  • Değişiklik:Ara yazılımı yalnızca sonraki isteklerin Accept-Encoding üst bilgisi özgün isteğinkiyle eşebiliyorsa önbelleğe alınmış bir yanıta hizmet verecek şekilde yapılandırıyor.
// 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();
});

Yukarıdaki üst bilgiler yanıta yazılamaz ve denetleyici, eylem veya Sayfa olduğunda geçersiz Razor kılınır:

Ara Önbelleğe Alma yanıt, yalnızca 200 (Tamam) durum koduyla sonuçlandıran sunucu yanıtlarını önbelleğe alıyor. Hata sayfaları da dahil olmak üzere diğer tümyanıtlar ara yazılım tarafından yoksayılır.

Uyarı

Ara yazılımların bu yanıtları depolamasını ve yanıtlamasını önlemek için kimliği doğrulanmış istemciler için içerik içeren yanıtların önbelleğe alınamaz olarak işaretlanması gerekir. Ara yazılımların bir yanıtın önbelleğe alınabilir olup olmadığını belirlemesi hakkında ayrıntılı bilgi için bkz. Önbelleğe alma koşulları.

Seçenekler

Yanıt önbelleğe alma seçenekleri aşağıdaki tabloda gösterilmiştir.

Seçenek Açıklama
MaximumBodySize Bayt cinsinden yanıt gövdesi için önbelleğe alınabilir en büyük boyut. Varsayılan değer 64 * 1024 * 1024 (64 MB) değeridir.
SizeLimit Bayt cinsinden yanıt önbelleği ara yazılımı için boyut sınırı. Varsayılan değer 100 * 1024 * 1024 (100 MB) değeridir.
UseCaseSensitivePaths Yanıtların büyük/büyük/büyük harfe duyarlı yollarda önbelleğe alınarak alınarak belirlenecek. false varsayılan değerdir.

Aşağıdaki örnek ara yazılımı şu şekilde yapılandırıyor:

  • Gövde boyutu 1.024 bayt veya daha küçük olan önbellek yanıtları.
  • Yanıtları büyük/büyük/büyük harfe duyarlı yollara göre depolar. Örneğin, /page1 ve /Page1 ayrı olarak depolanır.
services.AddResponseCaching(options =>
{
    options.MaximumBodySize = 1024;
    options.UseCaseSensitivePaths = true;
});

VaryByQueryKeys

MVC / web API'si denetleyicileri veya Sayfalar sayfa modelleri kullanılırken, özniteliği yanıt önbelleğe alma için uygun üst bilgileri Razor [ResponseCache] ayarlamaya yönelik gerekli parametreleri belirtir. Özniteliğin ara yazılımı kesinlikle gerektiren tek parametresi, gerçek bir HTTP üst [ResponseCache] VaryByQueryKeys bilgisinde karşılık gelen parametresidir. Daha fazla bilgi için bkz. ASP.NET Core 'de yanıt önbelleğe alma.

özniteliğini [ResponseCache] kullanmazken, yanıt önbelleğe alma ile çeşitli VaryByQueryKeys olabilir. Doğrudan ResponseCachingFeature HttpContext.Features adresinden kullanın:

var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();

if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}

içinde değerine eşit tek bir * VaryByQueryKeys değer kullanmak, önbelleği tüm istek sorgusu parametrelerine göre değişir.

Response Önbelleğe Alma Ara Yazılımı tarafından kullanılan HTTP üst bilgileri

Aşağıdaki tablo, yanıt önbelleğe almayı etkileyen HTTP üst bilgileri hakkında bilgi sağlar.

Üst bilgi Ayrıntılar
Authorization Üst bilgi varsa yanıt önbelleğe alınmaz.
Cache-Control Ara yazılım yalnızca önbellek yönergesi ile işaretlenmiş önbelleğe alma public yanıtlarını göz önünde bulundurır. Önbelleğe almayı aşağıdaki parametrelerle denetleme:
  • yaş üst sınırı
  • max-eski†
  • min-fresh
  • yeniden doğrulanmalı
  • önbellek yok
  • no-store
  • yalnızca önbelleğe alınmışsa
  • private
  • public
  • s-maxage
  • proxy-revalidate‡
†için bir sınır max-stale belirtilmezse ara yazılım hiçbir eylemde yoktur.
proxy-revalidate ile aynı etkiye must-revalidate sahiptir.

Daha fazla bilgi için bkz. RFC 7231: İstek Cache-Control Yönergeleri.
Pragma İstekte Pragma: no-cache üst bilgi ile aynı etkiyi Cache-Control: no-cache üretir. Bu üst bilgi varsa üst bilgide ilgili yönergeler Cache-Control tarafından geçersiz kılınır. HTTP/1.0 ile geriye dönük uyumluluk için dikkate alınır.
Set-Cookie Üst bilgi varsa yanıt önbelleğe alınmaz. İstek işleme işlem hattında bir veya daha fazla ayara sahip ara yazılım, Yanıt Önbelleğe Alma Ara Yazılımı'nın yanıtı önbelleğe almasını cookie (örneğin, cookie tabanlı TempData sağlayıcısı) önler.
Vary Üst Vary bilgi, önbelleğe alınan yanıtı başka bir üst bilgiye göre değişiklik yapmak için kullanılır. Örneğin, üst bilgilerle ve ayrı olarak istek yanıtlarını önbelleğe alan üst bilgisi dahil olarak kodlama ile Vary: Accept-Encoding Accept-Encoding: gzip yanıtları önbelleğe Accept-Encoding: text/plain alın. Üst bilgi değerine sahip bir yanıt * hiçbir zaman depolanır.
Expires Bu üst bilgi tarafından eski olduğu kabul olan bir yanıt, diğer üst bilgiler tarafından geçersiz kılınmadıkça depolanmaz veya Cache-Control alınmayacak.
If-None-Match Değer değilse ve yanıtın değeri sağlanan değerlerden hiçbiriyle eşleşmezse, tam * ETag yanıt önbellekten sağlanır. Aksi takdirde, 304 (Değiştirilmedi) yanıtı hizmet edilir.
If-Modified-Since Üst If-None-Match bilgi yoksa, önbelleğe alınan yanıt tarihi sağlanan değerden daha yeni ise önbellekten tam yanıt sağlanır. Aksi takdirde, 304 - Değiştirilmedi yanıtı hizmet edilir.
Date Önbellekten hizmet Date sağlarken üst bilgi, özgün yanıtta sağlanıyorsa ara yazılım tarafından ayarlanır.
Content-Length Önbellekten hizmet Content-Length sağlarken üst bilgi, özgün yanıtta sağlanıyorsa ara yazılım tarafından ayarlanır.
Age Özgün Age yanıtta gönderilen üst bilgi yoksayılır. Ara yazılım, önbelleğe alınmış bir yanıt sağlarken yeni bir değer hesaplar.

Önbelleğe Alma yönergelerini Cache-Control kabul ediyor

Ara yazılım, HTTP 1.1'in kurallarına ve Önbelleğe Alma karşılar. Kurallar, istemci tarafından gönderilen geçerli bir üst bilgiye Cache-Control uyulmak için bir önbellek gerektirir. Belirtim kapsamında, bir istemci üst bilgi değeriyle istekte olabilir ve sunucuyu her no-cache istek için yeni bir yanıt üretmeye zorlar. Şu anda ara yazılımı kullanırken bu önbelleğe alma davranışı üzerinde geliştirici denetimi yoktur çünkü ara yazılım resmi önbelleğe alma belirtimlerine uymektedir.

Önbelleğe alma davranışı üzerinde daha fazla denetim için diğer önbelleğe alma özelliklerini ASP.NET Core. Aşağıdaki konulara bakın:

Sorun giderme

Önbelleğe alma davranışı beklendiği gibi değilse, yanıtların önbelleğe alınabilen ve önbellekten servis edilebilir olduğunu onaylayın. İsteğin gelen üst bilgilerini ve yanıtın giden üst bilgilerini inceleme. Hata ayıklamaya yardımcı olmak için günlüğe kaydetmeyi etkinleştirin.

Önbelleğe alma davranışını test etme ve sorun giderme sırasında tarayıcı, önbelleğe almayı istenmeyen şekillerde etkileyen istek üst bilgileri ayarlayabilirsiniz. Örneğin, bir tarayıcı sayfayı Cache-Control yenilerken üst no-cache bilgi olarak veya olarak ayarlanmış max-age=0 olabilir. Aşağıdaki araçlar istek üst bilgilerini açıkça ayarlayabilirsiniz ve önbelleğe almayı test etmek için tercih edilir:

Önbelleğe alma koşulları

  • İstek, 200 (Tamam) durum kodu ile bir sunucu yanıtı ile sonuçlanmalıdır.
  • İstek yöntemi GET veya HEAD olmalıdır.
  • Startup.Configure' de, yanıt Önbelleğe Alma ara yazılımı, önbelleğe alma gerektiren ara yazılımlar için yerleştirilmelidir. Daha fazla bilgi için bkz. ASP.NET Core Middleware.
  • AuthorizationÜst bilgi mevcut olmamalıdır.
  • Cache-Control üst bilgi parametreleri geçerli olmalıdır ve yanıtın işaretlenmiş ve işaretlenmemiş olması gerekir public private .
  • Üst bilgi mevcut olmadığında üst bilgi mevcut olmamalıdır, üstbilgi mevcut Pragma: no-cache Cache-Control olduğunda üstbilgiyi Cache-Control geçersiz kılar Pragma .
  • Set-CookieÜst bilgi mevcut olmamalıdır.
  • Vary üst bilgi parametreleri geçerli ve eşit olmalıdır * .
  • Content-LengthÜst bilgi değeri (ayarlandıysa), yanıt gövdesinin boyutuyla aynı olmalıdır.
  • IHttpSendFileFeatureKullanılmaz.
  • Yanıtın Expires üst bilgi ve max-age ve önbellek yönergeleri tarafından belirtilen eski olmaması gerekir s-maxage .
  • Yanıt arabelleğe alma başarılı olmalıdır. Yanıtın boyutu yapılandırılan veya varsayılan değerden küçük olmalıdır SizeLimit . Yanıtın gövde boyutu yapılandırılan veya varsayılan değerden küçük olmalıdır MaximumBodySize .
  • Yanıt, RFC 7234 belirtimlerine göre önbelleklenebilir olmalıdır. Örneğin, no-store yönerge istek veya yanıt üst bilgisi alanlarında mevcut olmamalıdır. Ayrıntılar için bkz. 3. Bölüm: RFC 7234 önbelleklerinde yanıtları depolama .

Not

Siteler arası Istek sahteciliği (CSRF) saldırılarını önlemeye yönelik güvenli belirteçler oluşturmaya yönelik Antiforgery sistemi, Cache-Control Pragma no-cache yanıtların önbelleğe alınmaması için ve üst bilgilerini olarak ayarlar. HTML form öğeleri için antiforgery belirteçlerini devre dışı bırakma hakkında daha fazla bilgi için bkz ASP.NET Core siteler arası Istek sahteciliği (XSRF/CSRF) saldırılarını önle ..

Ek kaynaklar

bu makalede, bir ASP.NET Core uygulamasında yanıt Önbelleğe Alma ara yazılımı yapılandırma açıklanmaktadır. Ara yazılım, yanıtların önbelleklenebilir olup olmadığını belirler, yanıtları depolar ve önbellekten yanıt verir. HTTP önbelleğe alma ve özniteliğe giriş için [ResponseCache] bkz. Response Önbelleğe Alma.

Örnek kodu görüntüleme veya indirme (nasıl indirileceği)

Yapılandırma

Microsoft.AspNetCore.app metapackage 'i kullanın veya Microsoft. Aspnetcore. responsecaching paketine bir paket başvurusu ekleyin.

' de Startup.ConfigureServices , yanıt Önbelleğe Alma ara yazılımını hizmet koleksiyonuna ekleyin:

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();
    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

Uygulamayı, UseResponseCaching içindeki istek işleme işlem hattına bir ara yazılım ekleyen uzantı yöntemiyle ara yazılımı kullanacak şekilde yapılandırın Startup.Configure :

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }

    app.UseStaticFiles();

    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.UseMvc();
}

Örnek uygulama, sonraki isteklerde önbelleğe almayı denetlemek için üstbilgiler ekler:

  • Cache-Control: 10 saniyeye kadar önbelleklenebilir yanıtları önbelleğe alır.
  • Farklılık: yalnızca sonraki Isteklerin kabul etme-kodlama üst bilgisi özgün istekten eşleşiyorsa, önbelleğe alınmış bir yanıt sunacak şekilde ara yazılımı yapılandırır.
// 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();
});

Yukarıdaki üstbilgiler yanıta yazılmaz ve bir denetleyici, eylem veya sayfa olduğunda geçersiz kılınır Razor :

  • [Responsecache] özniteliğine sahiptir. Bir özellik ayarlanmamışsa bile bu geçerlidir. Örneğin, VaryByHeader özelliğinin atlanması karşılık gelen üstbilginin yanıttan kaldırılmasına neden olur.

yanıt Önbelleğe Alma ara yazılımı yalnızca 200 (tamam) durum kodu ile sonuçlanan sunucu yanıtlarını önbelleğe alır. Hata sayfalarıdahil diğer tüm yanıtlar, ara yazılım tarafından yok sayılır.

Uyarı

Kimliği doğrulanmış istemciler için içerik içeren yanıtların, ara yazılımın bu yanıtları depolamasını ve hizmet vermek için önbelleğe alınamaz olarak işaretlenmesi gerekir. Bir yanıtın önbelleklenmesini nasıl belirlediği hakkında bilgi için bkz. önbelleğe alma koşulları .

Seçenekler

Yanıt önbelleğe alma seçenekleri aşağıdaki tabloda gösterilmiştir.

Seçenek Açıklama
MaximumBodySize Yanıt gövdesi için bayt cinsinden en büyük önbelleklenebilir boyut. Varsayılan değer 64 * 1024 * 1024 (64 MB).
SizeLimit Yanıt önbelleği ara yazılımı için bayt cinsinden boyut sınırı. Varsayılan değer 100 * 1024 * 1024 (100 MB).
UseCaseSensitivePaths Yanıtların büyük/küçük harfe duyarlı yollarda önbelleğe alınıp alınmayacağını belirler. false varsayılan değerdir.

Aşağıdaki örnek, şu şekilde bir ara yazılım yapılandırır:

  • Gövde boyutu 1.024 bayttan küçük veya buna eşit olan önbellek yanıtları.
  • Yanıtları büyük/küçük harfe duyarlı yollarla depolayın. Örneğin, /page1 ve /Page1 ayrı olarak depolanır.
services.AddResponseCaching(options =>
{
    options.MaximumBodySize = 1024;
    options.UseCaseSensitivePaths = true;
});

VaryByQueryKeys

MVC/web API denetleyicileri veya Razor sayfaları sayfa modellerini kullanırken [ResponseCache] öznitelik, yanıt önbelleğe alma için uygun üst bilgileri ayarlamak için gereken parametreleri belirtir. Yalnızca [ResponseCache] Ara yazılım gerektiren özniteliğin tek parametresi, VaryByQueryKeys gerçek bir http üst bilgisine karşılık gelmiyor. Daha fazla bilgi için bkz. ASP.NET Core 'de yanıt önbelleğe alma.

[ResponseCache]Özniteliği kullanmıyorsanız, yanıt önbelleğe alma ile değiştirilebilir VaryByQueryKeys . ResponseCachingFeatureDoğrudan HttpContext. Featuresiçinden kullanın:

var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();

if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}

Tek bir değerin ' de değerine eşit olması * VaryByQueryKeys , önbelleğin tüm istek sorgu parametrelerine göre değişiklik gösterir.

yanıt Önbelleğe Alma ara yazılımı tarafından kullanılan HTTP üstbilgileri

Aşağıdaki tabloda, yanıt önbelleğini etkileyen HTTP üstbilgileri hakkında bilgi verilmektedir.

Üst bilgi Ayrıntılar
Authorization Üst bilgi varsa yanıt önbelleğe alınmaz.
Cache-Control Ara yazılım yalnızca önbellek yönergesi ile işaretlenmiş önbelleğe alma yanıtlarını dikkate alır public . Aşağıdaki parametrelerle önbelleğe alma denetimi:
  • Maksimum yaş
  • en fazla-eski†
  • en az-yeni
  • yeniden doğrulama gerekir
  • önbellek yok
  • mağaza yok
  • yalnızca-if-önbelleğe alındı
  • private
  • public
  • s-maxage
  • Proxy-yeniden doğrulama‡
†hiçbir sınır belirtilmemişse max-stale , ara yazılım hiçbir eylemde bulunmaz.
proxy-revalidate , ile aynı etkiye sahiptir must-revalidate .

Daha fazla bilgi için bkz. RFC 7231: istek Cache-Control yönergeleri.
Pragma Pragma: no-cacheİstekteki bir üst bilgi, ile aynı etkiyi üretir Cache-Control: no-cache . Bu üst bilgi, varsa başlıktaki ilgili yönergeler tarafından geçersiz kılınır Cache-Control . HTTP/1.0 ile geriye dönük uyumluluk için değerlendirilir.
Set-Cookie Üst bilgi varsa yanıt önbelleğe alınmaz. istek işleme ardışık düzeninde bir veya daha fazla s ayarlayan herhangi bir ara yazılım, yanıt cookie Önbelleğe Alma ara yazılımı 'nın yanıtı (örneğin, cookie tabanlı tempdata provider) önbelleğe almasını engeller.
Vary Üst bilgi, Vary başka bir üst bilgi tarafından önbelleğe alınan yanıtı değiştirmek için kullanılır. Örneğin, üst bilgi Vary: Accept-Encoding Accept-Encoding: gzip ve ayrı ayrı istekler için yanıtları önbelleğe alan üstbilgiyi ekleyerek kodlamaya göre yanıtları önbelleğe alır Accept-Encoding: text/plain . Üstbilgi değeri olan bir yanıt hiçbir şekilde * depolanmaz.
Expires Bu üstbilginin eski olduğu bir yanıt, diğer üstbilgiler tarafından geçersiz kılınmadıkça depolanmaz veya alınamaz Cache-Control .
If-None-Match Tam yanıt, değer değilse önbellekten * , ETag yanıtın ise belirtilen değerlerden hiçbiriyle eşleşmez. Aksi takdirde, 304 (değiştirilmez) yanıtı sunulur.
If-Modified-Since If-None-MatchÜst bilgi yoksa, önbelleğe alınmış yanıt tarihi verilen değerden daha yeniyse önbellekten tam bir yanıt sunulur. Aksi takdirde, 304 olarak değiştirilmemiş bir yanıt sunulur.
Date Önbellekten hizmet verirken, Date özgün yanıtta sağlanmadıysa üst bilgi ara yazılım tarafından ayarlanır.
Content-Length Önbellekten hizmet verirken, Content-Length özgün yanıtta sağlanmadıysa üst bilgi ara yazılım tarafından ayarlanır.
Age AgeÖzgün yanıtta gönderilen üstbilgi yok sayılır. Ara yazılım, önbelleğe alınmış bir yanıta hizmet verirken yeni bir değeri hesaplar.

Önbelleğe Alma saygı isteği Cache-Control yönergeleri

ara yazılım, HTTP 1,1 Önbelleğe Alma belirtimininkurallarına uyar. Kurallar, istemci tarafından gönderilen geçerli bir üst bilgiyi kabul etmek için bir önbellek gerektirir Cache-Control . Belirtim altında, bir istemci bir no-cache üst bilgi değeri ile istek yapabilir ve sunucuyu her istek için yeni bir yanıt oluşturmaya zorlayabilir. Şu anda, ara yazılım resmi önbelleğe alma belirtimine bağlı olduğundan, ara yazılım kullanılırken bu önbelleğe alma davranışı üzerinde geliştirici denetimi yoktur.

Önbelleğe alma davranışı üzerinde daha fazla denetim için ASP.NET Core diğer önbelleğe alma özelliklerine göz atın. Aşağıdaki konulara bakın:

Sorun giderme

Önbelleğe alma davranışı beklenmiyorsa, yanıtların önbelleklenmesini ve önbellekten sunulduğunu doğrulayın. İsteğin gelen üst bilgilerini ve yanıtın giden üst bilgilerini inceleyin. Hata ayıklamaya yardımcı olmak için günlük kaydını etkinleştirin.

Önbelleğe alma davranışını test ederken ve sorun giderirken, bir tarayıcı, istenmeyen yollarla önbelleğe almayı etkileyen istek üst bilgilerini ayarlayabilir. Örneğin, bir tarayıcı Cache-Control üstbilgiyi no-cache max-age=0 bir sayfa yenileyene veya olarak ayarlayabilir. Aşağıdaki araçlar, istek üst bilgilerini açık bir şekilde ayarlayabilir ve önbelleğe alma testi için tercih edilir:

Önbelleğe alma koşulları

  • İstek, 200 (Tamam) durum kodu ile bir sunucu yanıtı ile sonuçlanmalıdır.
  • İstek yöntemi GET veya HEAD olmalıdır.
  • Startup.Configure' de, yanıt Önbelleğe Alma ara yazılımı, önbelleğe alma gerektiren ara yazılımlar için yerleştirilmelidir. Daha fazla bilgi için bkz. ASP.NET Core Middleware.
  • AuthorizationÜst bilgi mevcut olmamalıdır.
  • Cache-Control üst bilgi parametreleri geçerli olmalıdır ve yanıtın işaretlenmiş ve işaretlenmemiş olması gerekir public private .
  • Üst bilgi mevcut olmadığında üst bilgi mevcut olmamalıdır, üstbilgi mevcut Pragma: no-cache Cache-Control olduğunda üstbilgiyi Cache-Control geçersiz kılar Pragma .
  • Set-CookieÜst bilgi mevcut olmamalıdır.
  • Vary üst bilgi parametreleri geçerli ve eşit olmalıdır * .
  • Content-LengthÜst bilgi değeri (ayarlandıysa), yanıt gövdesinin boyutuyla aynı olmalıdır.
  • IHttpSendFileFeatureKullanılmaz.
  • Yanıtın Expires üst bilgi ve max-age ve önbellek yönergeleri tarafından belirtilen eski olmaması gerekir s-maxage .
  • Yanıt arabelleğe alma başarılı olmalıdır. Yanıtın boyutu yapılandırılan veya varsayılan değerden küçük olmalıdır SizeLimit . Yanıtın gövde boyutu yapılandırılan veya varsayılan değerden küçük olmalıdır MaximumBodySize .
  • Yanıt, RFC 7234 belirtimlerine göre önbelleklenebilir olmalıdır. Örneğin, no-store yönerge istek veya yanıt üst bilgisi alanlarında mevcut olmamalıdır. Ayrıntılar için bkz. 3. Bölüm: RFC 7234 önbelleklerinde yanıtları depolama .

Not

Siteler arası Istek sahteciliği (CSRF) saldırılarını önlemeye yönelik güvenli belirteçler oluşturmaya yönelik Antiforgery sistemi, Cache-Control Pragma no-cache yanıtların önbelleğe alınmaması için ve üst bilgilerini olarak ayarlar. HTML form öğeleri için antiforgery belirteçlerini devre dışı bırakma hakkında daha fazla bilgi için bkz ASP.NET Core siteler arası Istek sahteciliği (XSRF/CSRF) saldırılarını önle ..

Ek kaynaklar