ehchache验证缓存过期的api_ASP.NET Core ResponseCache进行缓存操作
(給DotNet加星標,提升.Net技能)
轉自:HueiFengcnblogs.com/yyfh/p/12361255.html
前言
本章將介紹客戶端緩存將介紹瀏覽器緩存和服務端緩存,使用瀏覽器緩存將減少對web服務器的請求次數,同時可以提升性能,避免重復的運算浪費。
ASP.NET Core對于HTTP緩存分為兩種:
客戶端(瀏覽器緩存)
服務端緩存
客戶端緩存
通過設置HTTP的響應頭 Cache-Control 來完成頁面存儲到瀏覽器緩存中如下所示:
其實客戶端緩存的話只需要進行設置 ResponseCache 特性就可以請看如下代碼片段
[ResponseCache(Duration = 100,Location = ResponseCacheLocation.Client)]
public IActionResult Index(){
return View();
}ResponseCacheAttribute 可應用于:
Razor 頁面處理程序(類) – 特性不能應用于處理程序方法。
MVC 控制器(類)。
MVC 操作(方法) – 方法級特性覆蓋類級特性中指定的設置。
[ResponseCache] 參數
Duration 設置緩存的存儲時間(以秒為單位)。設置“Cache-control”中的“max-age”。
Location
Any 緩存在代理和客戶端。設置“Cache-control”標題為“public”。
Client 只緩存在客戶端。設置“Cache-control”標題為“private”。
None 每次有請求發出時,緩存會將請求發到服務器 ,服務器端會驗證請求中所描述的緩存是否過期,若未過期(注:
實際就是返回304),則緩存才使用本地緩存副本。?報頭設置為“no-cache”。
NoStore 緩存中不得存儲任何關于客戶端請求和服務端響應的內容。每次由客戶端發起的請求都會下載完整的響應內容。
VaryByHeader 使用vary頭有利于內容服務的動態多樣性。例如,使用Vary: User-Agent頭,緩存服務器需要通過UA判斷是否使用緩存的頁面。
VaryByQueryKeys 可以按照相同頁面,不同的參數進行相應的存儲
CacheProfileName 設置緩存配置文件的值,可以通過設置不同的緩存參數
CacheProfileName使用請看如下代碼片段
public void ConfigureServices(IServiceCollection services){
services.AddControllersWithViews(options =>
{
options.CacheProfiles.Add("default", new CacheProfile
{
Duration = 60
});
options.CacheProfiles.Add("test", new CacheProfile
{
Duration = 30
});
});
}上述代碼我們設置好了兩份不一樣的配置,那么我們就可以通過下面代碼片段進行使用了
[ResponseCache(CacheProfileName = "default")]
public IActionResult Index(){
return View();
}服務端緩存
服務端緩存可以緩存頁面數據和API數據,同時如果我們服務端存在數據,也就是緩存命中的情況下,會直接從緩存中取,不會再進入我們的方法。
public void ConfigureServices(IServiceCollection services){
services.AddResponseCaching(options =>
{
options.UseCaseSensitivePaths = false;
options.MaximumBodySize = 1024;
options.SizeLimit = 100 * 1024*1024;
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
app.UseResponseCaching();
}服務端緩存配置如下
[ResponseCache(Duration = 30, VaryByQueryKeys = new[] { "q" })]
public IActionResult Index(int q){
_logger.LogWarning($"我是一個路徑:{HttpContext.Request.Host}");
return View(model:DateTime.Now.ToString());
}VaryByQueryKeys
使用 MVC/web API 控制器或 Razor Pages 頁面模型時, [ResponseCache]屬性指定為響應緩存設置適當的標頭所需的參數。嚴格需要中間件的 [ResponseCache] 屬性的唯一參數 VaryByQueryKeys,這與實際 HTTP 標頭不對應。有關詳細信息,請參閱 響應緩存在 ASP.NET Core。
如果不使用 [ResponseCache] 屬性,響應緩存可能會與 VaryByQueryKeys不同。
我們再看看如上代碼效果
ResponseCache中間件使用的 HTTP 標頭
緩存條件
請求必須導致服務器響應,狀態代碼為200(正常)。
請求方法必須為 GET 或 HEAD。
在 Startup.Configure中,響應緩存中間件必須置于需要緩存的中間件之前。
Authorization 標頭不得存在。
Cache-Control 標頭參數必須是有效的,并且響應必須標記為 "public" 且未標記為 "private"。
如果 Cache-Control 標頭不存在,則 Pragma: no-cache 標頭不得存在,因為 Cache-Control 標頭在存在時將覆蓋 Pragma 標頭。
Set-Cookie 標頭不得存在。
Vary 標頭參數必須有效且不等于 *。
Content-Length 標頭值(如果已設置)必須與響應正文的大小匹配。
不使用 IHttpSendFileFeature。
Expires 標頭和 max-age 和 s-maxage 緩存指令指定的響應不能過時。
響應緩沖必須成功。響應的大小必須小于配置的或默認 SizeLimit。響應的正文大小必須小于配置的或默認的 MaximumBodySize。
"請求" 或 "響應" 標頭字段中不得存在 "no-store" 指令。
看完本文有收獲?請轉發分享給更多人
關注「DotNet」加星標,提升.Net技能?
好文章,我在看??
總結
以上是生活随笔為你收集整理的ehchache验证缓存过期的api_ASP.NET Core ResponseCache进行缓存操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可视化案例书籍推荐_这5款P
- 下一篇: stream filter 用法_JDK