日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ehchache验证缓存过期的api_ASP.NET Core ResponseCache进行缓存操作

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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" 指令。

推薦閱讀??點擊標題可跳轉Docker 運行 Jenkins 自動化構建 .NET Core 項目ASP.NET Core 3.x 授權中的概念ASP.NET Core 配置和使用環境變量

看完本文有收獲?請轉發分享給更多人

關注「DotNet」加星標,提升.Net技能?

好文章,我在看??

總結

以上是生活随笔為你收集整理的ehchache验证缓存过期的api_ASP.NET Core ResponseCache进行缓存操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。