客戶端快取

2021-04-13 11:07:42 字數 2855 閱讀 3384

你的**在併發訪問很大並且無法承受壓力的情況下,你會選擇如何優化?

很 多人首先會想從伺服器快取方面著手對程式進行優化,許多不同的伺服器快取方式都有他們自己的特點,像我曾經參與的一些專案中,根據快取的命中率不同使用過 com+/enterprise libiary caching/windows服務,靜態檔案等方式的伺服器端快取和

1) 什麼是」last-modified」?

在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣: 

last-modified: fri, 12 may 2006 18:53:33 gmt 

客戶端第二次請求此url時,根據 http 協議的規定,瀏覽器會向伺服器傳送 if-modified-since 報頭,詢問該時間之後檔案是否有被修改過: 

if-modified-since: fri, 12 may 2006 18:53:33 gmt 

如 果伺服器端的資源沒有變化,則自動返回 http 304 (not changed.)狀態碼,內容為空,這樣就節省了傳輸資料量。當伺服器端**發生改變或者重啟伺服器時,則重新發出資源,返回和第一次請求時類似。從而 保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。 

2) 什麼是」etag」? 

http 協議規格說明定義etag為「被請求變數的實體值」 (

參見 —— 章節 14.19)。 另一種說法是,etag是乙個可以與web資源關聯的記號(token)。典型的web資源可以乙個web頁,但也可能是json或xml文件。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端,以下是伺服器端返回的格式: 

etag: "50b1c1d4f775c61:df3" 

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

if-none-match: w/"50b1c1d4f775c61:df3" 

聰 明的開發者會把last-modified 和etags請求的http報頭一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生 last-modified/etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其(客 戶端)快取。 

過程如下:

1. 客戶端請求乙個頁面(a)。 

2. 伺服器返回頁面a,並在給a加上乙個last-modified/etag。 

3. 客戶端展現該頁面,並將頁面連同last-modified/etag一起快取。 

4. 客戶再次請求頁面a,並將上次請求時伺服器返回的last-modified/etag一起傳遞給伺服器。 

5. 伺服器檢查該last-modified或etag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304和乙個空的響應體。

下面的例子描述如何使用伺服器端**去操作客戶端快取: 1//

預設快取的秒數

2int

secondstime 

=100;3

4//判斷最後修改時間是否在要求的時間內5//

如果伺服器端的檔案沒有被修改過,則返回狀態是304,內容為空,這樣就節省了傳輸資料量。如果伺服器端的檔案被修改過,則返回和第一次請求時類似。6if

(request.headers[

"if-modified-since"] 

!=null

&×pan.fromticks(datetime.now.ticks 

-datetime.parse(request.headers[

"if-modified-since

"]).ticks).seconds 

<

secondstime)715

else

1623

24#region

setclientcaching..

25///

26///

設定客戶端快取狀態

如果你的快取是基於檔案的方式,如xml或http中的.ashx處理,也可以使用下面的基於檔案方式的客戶端快取: 

1#region

setfilecaching..

2///

3///

基於檔案方式設定客戶端快取

使用後的效果如下圖所示:

上圖所使用的工具是在ie下執行的

httpwatchpro,在firefox下可以使用

firebug+

yslow進行測試.

yslow是建立在firebug基礎上執行的乙個小工具,它可以對你的網頁進行分析為什麼快取,並給出評分和緩慢的原因.這個工具來自yahoo的研發團隊,所以規則也是yahoo制定的.

我 們已經看了如何使用客戶端快取減少頻寬和計算的方法,如前所述,如果能正確合理的利用各種不同的快取,他們會給你帶來很多的好處.我希望本文已為你當下或 將來基於web的專案提供了精神食糧,並正確地在底層利用last- modified和etag響應頭去優化你的專案。

php http 快取 客戶端快取

expires 過期時間 cache control 響應頭資訊 max age 秒 快取過期時間 請求時間開始到過期時間的秒數 s maxage 秒 快取過期時間 public 標記認證內容能被快取,一般而言輸出是不能被快取的,no cache 無快取,表示直接讀取資料源,no store 強制快...

禁用客戶端快取

1 禁用客戶端快取 html asp response.expires 1 response.expiresabsolute now 1 response.cachecontrol no cache php header expires mon,26 jul 1997 05 00 00 gmt he...

客戶端快取 Client Cache

通常在伺服器端大家都已經做了很多快取的工作,asp.net cache也好memerycache也好卻總是忽略了客戶端快取。因為大家都知道不管哪個client都會快取已經訪問過的站點,但是瀏覽器快取時間都是短暫的,所以最好是自定義延長瀏覽器快取。這個時候就需要修改http頭資訊了,頭資訊中有個字段 ...