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:
- [ResponseCache] özniteliğine sahip. Bir özellik ayarlanmasa bile bu geçerlidir. Örneğin VaryByHeader özelliğinin kaldırılması, karşılık gelen üst bilginin yanıttan kaldırılmasına neden olur.
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,
/page1ve/Page1ayrı 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:
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:
- ASP.NET Core 'de önbellek belleği
- ASP.NET Core 'de dağıtılmış önbelleğe alma
- ASP.NET Core MVC 'de önbellek etiketi yardımcısı
- ASP.NET Core dağıtılmış önbellek etiketi Yardımcısı
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ı gerekirpublicprivate.- Üst bilgi mevcut olmadığında üst bilgi mevcut olmamalıdır, üstbilgi mevcut
Pragma: no-cacheCache-Contrololduğunda üstbilgiyiCache-Controlgeçersiz kılarPragma. 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 vemax-ageve önbellek yönergeleri tarafından belirtilen eski olmaması gerekirs-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-storeyö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
- ASP.NET Core 'de uygulama başlatma
- ASP.NET Core Middleware
- ASP.NET Core 'de önbellek belleği
- ASP.NET Core 'de dağıtılmış önbelleğe alma
- ASP.NET Core'de değişiklik belirteçleriyle değişiklikleri ASP.NET Core
- ASP.NET Core 'de yanıt önbelleğe alma
- ASP.NET Core MVC 'de önbellek etiketi yardımcısı
- ASP.NET Core dağıtılmış önbellek etiketi Yardımcısı
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,
/page1ve/Page1ayrı 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:
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:
- ASP.NET Core 'de önbellek belleği
- ASP.NET Core 'de dağıtılmış önbelleğe alma
- ASP.NET Core MVC 'de önbellek etiketi yardımcısı
- ASP.NET Core dağıtılmış önbellek etiketi Yardımcısı
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ı gerekirpublicprivate.- Üst bilgi mevcut olmadığında üst bilgi mevcut olmamalıdır, üstbilgi mevcut
Pragma: no-cacheCache-Contrololduğunda üstbilgiyiCache-Controlgeçersiz kılarPragma. 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 vemax-ageve önbellek yönergeleri tarafından belirtilen eski olmaması gerekirs-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-storeyö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
- ASP.NET Core 'de uygulama başlatma
- ASP.NET Core Middleware
- ASP.NET Core 'de önbellek belleği
- ASP.NET Core 'de dağıtılmış önbelleğe alma
- ASP.NET Core'de değişiklik belirteçleriyle değişiklikleri ASP.NET Core
- ASP.NET Core 'de yanıt önbelleğe alma
- ASP.NET Core MVC 'de önbellek etiketi yardımcısı
- ASP.NET Core dağıtılmış önbellek etiketi Yardımcısı