日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
概述ASP.NET內(nèi)置HttpCachePolicy

頁面緩存

在ASP.NET中,如果你需要添加HTTP屬性,可以使用HttpResponse.AppendHeader方法,例如在Page的代碼中直接執(zhí)行Response.AppendHeader。HttpResponse.AddHeader方法是與之等效的,不過僅用于與ASP代碼兼容,所以我的建議你***不要使用。通過AppendHeader方法,你可以將上述Last-Modified屬性和ETag屬性寫入返回中。

接著我們考慮如何從請求中讀上述屬性然后判斷如何返回。我們可以使用HttpRequest.ServerVariables讀取請求中的屬性,然后和當前的值比較,如果比較結(jié)果表明內(nèi)容無變化,我們就可以設(shè)置HttpResponse.StatusCode為304,然后返回空內(nèi)容;如果比較結(jié)果表明內(nèi)容變化了,那就還是按一般的方式完成整個返回。

這很麻煩,對吧?所以ASP.NET內(nèi)置HttpCachePolicy類,讓我們可以直接控制有關(guān)屬性,我們可以通過HttpResponse.Cache訪問此類的實例,而如果在Page中我們可以直接通過 Reponse.Cache訪問它。這個類的使用方式在MSDN中有詳細的描述,所以我就不再解釋了。由于它的實現(xiàn)也依靠上述HTTP屬性,所以使用 AppendHeader控制上述屬性時,就會破壞掉HttpCachePolicy中的設(shè)置(如果你設(shè)置了的話)。因此直接使用AppendHeader與通過HttpCachePolicy間接控制這兩個方法中,同一時間***僅用其中的一個,如果你需要靈活性就使用前者,如果你需要簡單設(shè)置就是用后者。

資源緩存

ASP.NET內(nèi)置HttpCachePolicy和Cache,這讓Page的緩存已經(jīng)足夠方便,所以讓我們來看一看非Page該怎么緩存。事實上資源文件(例如js和css)的***可能請求數(shù)量比Page要多得多,因為一個Page通常鏈接幾個資源文件。

編譯嵌入資源

我們先來看看編譯控件是如何緩存資源的。系統(tǒng)自帶的很多控件都是帶有資源的,因為他們需要這些小圖片、腳本或樣式來確保它們的正常運行,這些資源編譯時選擇為嵌入到dll中,之后無論控件發(fā)布到哪都會附帶有這些資源。這些嵌入到dll中的資源以特定的形式引用,在控件呈現(xiàn)為HTML代碼時就成了 WebResource.axd開頭鏈接,例如:

 
 
 
  1.  

WebResource.axd注冊為由AssemblyResourceLoader處理,這個IHttpHandler專門負責從dll中將資源文件提取出來,然后返回給客戶端。

留意WebResource.axd后面的兩個參數(shù),d是資源的標示,它表明了當前請求的是哪個資源;t是該dll***編譯的時間戳,如果dll重新編譯了t就會跟著改變,這就讓瀏覽器知道這是一個新的URL,不應(yīng)該再使用原來的緩存。

需要強調(diào)的是,這并非是一個具有兼容性的做法,它只能確保資源更新時緩存過期,但不能確保沒更新的資源成功緩存。根據(jù)RFC2616,瀏覽器操作分為安全與不安全兩類,GET和HEAD應(yīng)該是安全的,因為除了獲取信息它們不對外界造成任何影響;POST、PUT以及DELETE是不安全的,因為它們對外界造成影響,所以你刷新POST后的頁面時瀏覽器會提示你是否確認再次提交數(shù)據(jù)。RFC2616中提到,對于安全操作除非服務(wù)器端顯式聲明過期,否則客戶端有權(quán)直接取緩存來顯示,因為無論客戶端是從服務(wù)期端取還是從緩存取都應(yīng)該是不對外界造成任何影響的,然而有一種情況除外——就是當URL中存在QueryString時。

當URL中存在QueryString時,這個請求被認為是可能對外界造成影響的,所以當客戶端進行這個請求時必須通過服務(wù)器端完成,也就是不允許使用緩存。RFC2616如是說了,但并非每一個瀏覽器都如此做了。IE和Firefox違反RFC2616對有QueryString的URL進行緩存,而Opera和Safari則遵守此規(guī)矩每次重新獲取內(nèi)容。也就是說,ASP.NET的這種資源地址在Opera和Safari中是決不會被緩存的,例如你的ASP.NET應(yīng)用在MasterPage使用了ASP.NET AJAX的ScriptManager,那么打開每個頁面時有關(guān)的腳本文件都要從新下載。

非編譯嵌入資源

如果我們當前在寫一個ASP.NET網(wǎng)站,有些資源是直接以文件形式存在的,不是編譯嵌入到dll中的,那么我們就沒辦法享受上述系統(tǒng)提供的便利了,但我們可以自己實現(xiàn)類似的機制,并避免上述某些瀏覽器不緩存資源的問題。以上介紹ASP.NET內(nèi)置HttpCachePolicy

【編輯推薦】

  1. 微軟發(fā)布ASP.NET MVC 2預(yù)覽版 多項功能更新
  2. ASP.NET服務(wù)器自定義控件安全準則
  3. ASP.NET編程規(guī)范之編碼規(guī)范淺析
  4. 關(guān)于ASP.NET Session的一點認識
  5. ASP.NET編程工具ASP.NET Web Matrix詳細介紹

本文名稱:概述ASP.NET內(nèi)置HttpCachePolicy
標題路徑:http://m.5511xx.com/article/cdooepd.html