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

理解ASP.NET與客戶端緩存之HTTP協議

2013-11-13 10:18:45  來源: .NET編程 
前言

  這個系列的文章要討論的是如何通過ASPNET服務器端技術來優化客戶端緩存策略而且讓這種策略變得可配置和可擴展我們要了解的知識從HTTP協議中相關屬性對客戶端緩存的影響到ASPNET如何控制這些屬性來實現我們的緩存策略

  HTTP基礎知識

  由於討論涉及到客戶端緩存所以還是先要簡單介紹一下HTTP協議是如何控制客戶端緩存的這裡涉及到HTTP頭的LastModifiedETag等屬性

  LastModified

  在浏覽器第一次請求某一個URL時服務器端的返回狀態會是內容是你請求的資源同時有一個LastModified的屬性標記此文件在服務期端最後被修改的時間格式類似這樣

LastModified: Fri May :: GMT

  客戶端第二次請求此URL時會在頭部加入一個屬性詢問該時間之後文件是否有被修改過

IfModifiedSince: Fri May :: GMT

  如果服務器端的文件沒有被修改過則返回狀態是內容為空這樣就節省了傳輸數據量如果服務器端的文件被修改過則返回和第一次請求時類似

  ETag

  和LastModified類似由於RFC(也就是HTTP/)中沒有說明ETag該是什麼格式的只要確保用雙引號括起來就行了所以你可以用文件的hash甚至是直接用LastModified以下是服務器端返回的格式

ETag: bcdfc:df

  客戶端的查詢更新格式是這樣的

IfNoneMatch: W/bcdfc:df

  如果ETag沒改變則返回狀態然後不返回這也和LastModified一樣

Expires

  這個屬性就如我們在ASP中使用HttpResponseExpiresAbsolute一樣直接聲明某某時刻過期之後浏覽器就應該重新請求該URL使用格式為

Expires: Sun Feb :: GMT

  注意HttpResponseExpiresAbsolute在ASPNET中是不建議使用的現在我們應該使用的是HttpResponseCacheSetExpires

  Pragma

  通常我們用到的值就是nocache這和在CacheControl中使用nocache值是一樣的CacheControl在下面講Pragma的使用格式如下

  Pragma: nocache
  CacheControl

  這是一個集合型屬性它裡面能夠包含很多子屬性並且允許用戶擴展新的子屬性常見的子屬性包括

  maxage 以秒為單位的超時覆蓋Expires屬性
  public 允許保存在共享緩存中
  private 只允許保存在私有緩存中
  nocache 不允許緩存
  nostore 不允許緩存在持久介質中
  notransform 不允許轉換存儲系統
From:http://tw.wingwit.com/Article/program/net/201311/13221.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.