欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net 客戶端瀏覽器緩存的Http頭介紹

 更新時間:2009年07月18日 14:15:37   作者:  
做網(wǎng)站開發(fā)離不開緩存,緩存分好多種:服務(wù)器緩存,第三方緩存,瀏覽器緩存等。其中瀏覽器緩存是代價最小的,因為瀏覽器緩存依賴的是客戶端,而幾乎不耗費服務(wù)器端的資源。
讓瀏覽器做緩存需要給瀏覽器發(fā)送指定的Http頭,告訴瀏覽器緩存多長時間,或者堅決不要緩存。作為.net的程序員,其實我們一直都在用這種方法,在OutputCache指令中指定緩存的Location為Client時,其實就是給瀏覽器發(fā)送了一個Http頭,告訴瀏覽器這個Url要緩存多長時間,最后修改的時間。

微軟在OutputCacheModule中對這些緩存用到的Http頭給我們進行了很好的封裝,但是了解這些Http頭可以更靈活的使用它們。

和客戶端緩存相關(guān)的Http頭有以下幾個,分別是:

1. Expires:+過期時間
表示在指定時間后瀏覽器緩存失效,需要注意的是這兒的過期時間必須是HTTP格式的日期時間,其他的都會被解析成當前時間“之前”,緩存會馬上過期,HTTP的日期時間必須是格林威治時間(GMT),而不是本地時間。舉例:
復(fù)制代碼 代碼如下:

Expires: Fri, 30 Oct 2009 14:19:41

使用Expires過期必須要求服務(wù)器的時間是正確的,否則發(fā)送的http頭就會出問題,在windows服務(wù)下可以設(shè)置時間服務(wù)器來同步時間。

2. Cache-control:
Cache-control直譯成中文就是緩存控制,它的作用就是緩存控制,這個http頭的值有幾種。
1) max-age=[秒] — 執(zhí)行緩存被認為是最新的最長時間。類似于過期時間,這個參數(shù)是基于請求時間的相對時間間隔,而不是絕對過期時間,[秒]是一個數(shù)字,單位是秒:從請求時間開始到過期時間之間的秒數(shù)。
2) s-maxage=[秒] — 類似于max-age屬性,除了他應(yīng)用于共享(如:代理服務(wù)器)緩存
3) public — 標記認證內(nèi)容也可以被緩存,一般來說: 經(jīng)過HTTP認證才能訪問的內(nèi)容,輸出是自動不可以緩存的;
4) no-cache — 強制每次請求直接發(fā)送給源服務(wù)器,而不經(jīng)過本地緩存版本的校驗。這對于需要確認認證應(yīng)用很有用(可以和public結(jié)合使用),或者嚴格要求使用最新數(shù)據(jù)的應(yīng)用(不惜犧牲使用緩存的所有好處);
5) no-store — 強制緩存在任何情況下都不要保留任何副本
6) must-revalidate — 告訴緩存必須遵循所有你給予副本的新鮮度的,HTTP允許緩存在某些特定情況下返回過期數(shù)據(jù),指定了這個屬性,你高速緩存,你希望嚴格的遵循你的規(guī)則。
7) proxy-revalidate — 和 must-revalidate類似,除了他只對緩存代理服務(wù)器起作用
舉例:
復(fù)制代碼 代碼如下:

Cache-Control: max-age=3600, must-revalidate

很顯然Cache-control可以提供比Expires更靈活的緩存控制,而且它不需要依賴于服務(wù)器時間。
在Asp.Net中微軟把對Cache-control屬性的設(shè)置封裝到了HttpCachePolicy類中,我們可以通過Response.Cache來調(diào)用以下方法來做到對Cache-Control Http頭值的控制:
復(fù)制代碼 代碼如下:

Response.CacheControl;
Response.Cache.SetNoStore
Response.Cache.SetMaxAge
Response.Cache.SetProxyMaxAge
Response.Cache.SetRevalidation

3. Last-Modified/If-Modified-Since
這兩個Http頭是一對,前者表示某個地址的最近更新時間,是服務(wù)器端響應(yīng)給客戶端的;而后者是客戶端瀏覽器發(fā)送給服務(wù)器的,告訴web服務(wù)器客戶端有一個最后更改時間為什么時間的緩存,服務(wù)器端接收到If-Modified-Since頭后則判斷客戶端緩存的這份url地址的緩存是否是最新的,如果是最新的則服務(wù)器端直接給客戶端返回HttpStatus 304,意思是說這個內(nèi)容在你上次請求之后沒有變化過,你直接用緩存就可以了;如果服務(wù)器發(fā)現(xiàn)url的最后更新時間比If-Modified-Since的值要新,則會輸出新的內(nèi)容。

同樣微軟也為我們做了服務(wù)器端設(shè)置的封裝,我們可以這樣調(diào)用
復(fù)制代碼 代碼如下:

Response.Cache.SetLastModified(DateTime)
Response.Cache.SetLastModifiedFromFileDependencies()

如果有更復(fù)雜的需求就需要自己處理了。

4. ETag/If-None-Match
ETag和Last-Modified類似,不過他發(fā)送的是一個字符串來標示url的版本,如果url變了則此標示也跟著變化,在瀏覽器發(fā)送If-None-Match時告訴瀏覽器內(nèi)容已經(jīng)變了,或者沒變可以使用緩存。

Iis會自動給靜態(tài)文件加上Etag,在文件發(fā)生改變時重新生成一個Etag,這樣對于一個網(wǎng)站中的n多個靜態(tài)文件如:樣式表,小圖片等,客戶端只下載一次就夠了,可以減輕負載。

在Asp.Net中我們可以用以下兩個方法來設(shè)置
復(fù)制代碼 代碼如下:

Response.Cache.SetETag(string)
Response.Cache.SetETagFromFileDependencies()

盡管微軟為我們做了很多封裝,但是我們還是需要詳細的了解之后才可以用好這幾個Http頭。

相關(guān)文章

  • 詳解ASP.NET Razor 語法

    詳解ASP.NET Razor 語法

    這篇文章主要介紹了ASP.NET Razor 語法的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • .NET?6新特性試用之Nuget包驗證

    .NET?6新特性試用之Nuget包驗證

    這篇文章主要介紹了.NET?6新特性試用之Nuget包驗證,將.NET類庫打包成Nuget包,以便多個項目公用,下面我們就來學(xué)習(xí)西還內(nèi)容,詳細資料需要的朋友可以參考下面文章
    2022-03-03
  • ASP.net的驗證控件淺析

    ASP.net的驗證控件淺析

    前些天在做注冊頁面的驗證的時候,用了下ASP.net的驗證控件,有一些體會,特寫下這篇博客,如果有朋友有不同ideas,歡迎大家留言
    2011-11-11
  • 詳解ASP.NET MVC 下拉框的傳值的兩種方式

    詳解ASP.NET MVC 下拉框的傳值的兩種方式

    這篇文章主要介紹了詳解ASP.NET MVC 下拉框的傳值的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • .Net Core中使用Quartz.Net實踐記錄

    .Net Core中使用Quartz.Net實踐記錄

    Quartz.NET是一套很好的任務(wù)調(diào)度框架。下面這篇文章主要給大家介紹了關(guān)于.Net Core中使用Quartz.Net的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Bootstrap Blazor項目模板安裝

    Bootstrap Blazor項目模板安裝

    這篇文章介紹了Bootstrap Blazor項目模板的安裝方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • .Net防sql注入的幾種方法

    .Net防sql注入的幾種方法

    這篇文章主要給大家總結(jié)介紹了關(guān)于.Net防sql注入的幾種方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用.Net具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • VS2010發(fā)布Web網(wǎng)站技術(shù)攻略

    VS2010發(fā)布Web網(wǎng)站技術(shù)攻略

    本篇文章主要包含了完整的發(fā)布網(wǎng)站步驟、發(fā)布網(wǎng)站過程中可能遇到的問題,以及配套的解決方法,相信感興趣的朋友一定會喜歡這篇文章的
    2015-07-07
  • .net WINFORM的GDI雙緩沖的實現(xiàn)方法

    .net WINFORM的GDI雙緩沖的實現(xiàn)方法

    下面小編就為大家分享一篇.net WINFORM的GDI雙緩沖的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • .Net中實現(xiàn)無限分類的2個例子

    .Net中實現(xiàn)無限分類的2個例子

    這篇文章主要介紹了.Net中實現(xiàn)無限分類的2個例子,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02

最新評論