前言 這個系列的文章要討論的是如何通過ASP
NET服務器端技術來優化客戶端緩存策略
而且讓這種策略變得可配置和可擴展
我們要了解的知識從HTTP協議中相關屬性對客戶端緩存的影響
到ASP
NET如何控制這些屬性來實現我們的緩存策略
HTTP基礎知識
由於討論涉及到客戶端緩存
所以還是先要簡單介紹一下HTTP協議是如何控制客戶端緩存的
這裡涉及到HTTP頭的Last
Modified
ETag等屬性
Last
Modified
在浏覽器第一次請求某一個URL時
服務器端的返回狀態會是
內容是你請求的資源
同時有一個Last
Modified的屬性標記此文件在服務期端最後被修改的時間
格式類似這樣
Last
Modified: Fri
May
:
:
GMT
客戶端第二次請求此URL時
會在頭部加入一個屬性
詢問該時間之後文件是否有被修改過
If
Modified
Since: Fri
May
:
:
GMT
如果服務器端的文件沒有被修改過
則返回狀態是
內容為空
這樣就節省了傳輸數據量
如果服務器端的文件被修改過
則返回和第一次請求時類似
ETag
和Last
Modified類似
由於RFC
(也就是HTTP/
)中沒有說明ETag該是什麼格式的
只要確保用雙引號括起來就行了
所以你可以用文件的hash
甚至是直接用Last
Modified
以下是服務器端返回的格式
ETag:
b
c
d
f
c
:df
客戶端的查詢更新格式是這樣的
If
None
Match: W/
b
c
d
f
c
:df
如果ETag沒改變
則返回狀態
然後不返回
這也和Last
Modified一樣
Expires
這個屬性就如我們在ASP中使用HttpResponse
ExpiresAbsolute一樣直接
聲明某某時刻過期之後浏覽器就應該重新請求該URL
使用格式為
Expires: Sun
Feb
:
:
GMT
注意HttpResponse
ExpiresAbsolute在ASP
NET中是不建議使用的
現在我們應該使用的是HttpResponse
Cache
SetExpires
Pragma
通常我們用到的值就是no
cache
這和在Cache
Control中使用no
cache值是一樣的
Cache
Control在下面講
Pragma的使用格式如下
Pragma: no
cache
Cache
Control
這是一個集合型屬性
它裡面能夠包含很多子屬性
並且允許用戶擴展新的子屬性
常見的子屬性包括
max
age
以秒為單位的超時
覆蓋Expires屬性
public
允許保存在共享緩存中
private
只允許保存在私有緩存中
no
cache
不允許緩存
no
store
不允許緩存在持久介質中
no
transform
不允許轉換存儲系統
From:http://tw.wingwit.com/Article/program/net/201311/13221.html