熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

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

2022-06-13   來源: ASP編程 
讓浏覽器做緩存需要給浏覽器發送指定的Http頭告訴浏覽器緩存多長時間或者堅決不要緩存作的程序員其實我們一直都在用這種方法在OutputCache指令中指定緩存的Location為Client時其實就是給浏覽器發送了一個Http頭告訴浏覽器這個Url要緩存多長時間最後修改的時間

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

和客戶端緩存相關的Http頭有以下幾個分別是

Expires:+過期時間
表示在指定時間後浏覽器緩存失效需要注意的是這兒的過期時間必須是HTTP格式的日期時間其他的都會被解析成當前時間之前緩存會馬上過期HTTP的日期時間必須是格林威治時間(GMT)而不是本地時間舉例

  復制代碼 代碼如下:

  Expires: Fri Oct ::


使用Expires過期必須要求服務器的時間是正確的否則發送的http頭就會出問題在windows服務下可以設置時間服務器來同步時間

Cachecontrol:
Cachecontrol直譯成中文就是緩存控制它的作用就是緩存控制這個http頭的值有幾種
) maxage=[秒] — 執行緩存被認為是最新的最長時間類似於過期時間這個參數是基於請求時間的相對時間間隔而不是絕對過期時間[秒]是一個數字單位是秒從請求時間開始到過期時間之間的秒數
) smaxage=[秒] — 類似於maxage屬性除了他應用於共享(如代理服務器)緩存
) public — 標記認證內容也可以被緩存一般來說 經過HTTP認證才能訪問的內容輸出是自動不可以緩存的
) nocache — 強制每次請求直接發送給源服務器而不經過本地緩存版本的校驗這對於需要確認認證應用很有用(可以和public結合使用)或者嚴格要求使用最新數據的應用(不惜犧牲使用緩存的所有好處)
) nostore — 強制緩存在任何情況下都不要保留任何副本
) mustrevalidate — 告訴緩存必須遵循所有你給予副本的新鮮度的HTTP允許緩存在某些特定情況下返回過期數據指定了這個屬性你高速緩存你希望嚴格的遵循你的規則
) proxyrevalidate — 和 mustrevalidate類似除了他只對緩存代理服務器起作用
舉例:

  復制代碼 代碼如下:

  CacheControl: maxage= mustrevalidate


很顯然Cachecontrol可以提供比Expires更靈活的緩存控制而且它不需要依賴於服務器時間
在AspNet中微軟把對Cachecontrol屬性的設置封裝到了HttpCachePolicy類中我們可以通過ResponseCache來調用以下方法來做到對CacheControl Http頭值的控制

  復制代碼 代碼如下:

  ResponseCacheControl;
ResponseCacheSetNoStore
ResponseCacheSetMaxAge
ResponseCacheSetProxyMaxAge
ResponseCacheSetRevalidation


LastModified/IfModifiedSince
這兩個Http頭是一對前者表示某個地址的最近更新時間是服務器端響應給客戶端的而後者是客戶端浏覽器發送給服務器的告訴web服務器客戶端有一個最後更改時間為什麼時間的緩存服務器端接收到IfModifiedSince頭後則判斷客戶端緩存的這份url地址的緩存是否是最新的如果是最新的則服務器端直接給客戶端返回HttpStatus 意思是說這個內容在你上次請求之後沒有變化過你直接用緩存就可以了如果服務器發現url的最後更新時間比IfModifiedSince的值要新則會輸出新的內容

同樣微軟也為我們做了服務器端設置的封裝我們可以這樣調用

  復制代碼 代碼如下:

  ResponseCacheSetLastModified(DateTime)
ResponseCacheSetLastModifiedFromFileDependencies()


如果有更復雜的需求就需要自己處理了

ETag/IfNoneMatch
ETag和LastModified類似不過他發送的是一個字符串來標示url的版本如果url變了則此標示也跟著變化在浏覽器發送IfNoneMatch時告訴浏覽器內容已經變了或者沒變可以使用緩存

Iis會自動給靜態文件加上Etag在文件發生改變時重新生成一個Etag這樣對於一個網站中的n多個靜態文件如樣式表小圖片等客戶端只下載一次就夠了可以減輕負載

在AspNet中我們可以用以下兩個方法來設置

  復制代碼 代碼如下:

  ResponseCacheSetETag(string)
ResponseCacheSetETagFromFileDependencies()


盡管微軟為我們做了很多封裝但是我們還是需要詳細的了解之後才可以用好這幾個Http頭
From:http://tw.wingwit.com/Article/program/ASP/201405/30773.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.