在動態頁面裡象靜態頁面一樣控制整個網頁的快取和更新

2021-07-07 07:36:52 字數 1180 閱讀 1132

靜態頁面我們都知道,web伺服器在發回檔案內容時會附帶乙個

last-modified

頭資訊,把靜態檔案的最後修改時間儲存在裡面,這樣當下次瀏覽器請求該檔案時,會把得到的這個

last-modified

頭資訊裡的時間存在if-modified-since裡一起傳送給伺服器,告訴伺服器本地快取的最後修改時間,當伺服器接收到有if-modified-since

時間資訊的請求時,會先判斷檔案的最後修改時間是否比這個時間晚,晚就說明有更新,就會重發檔案內容,並附帶最新的

last-modified

頭資訊給客戶端,如果時間相等或者比這個時間早,那就說明沒有更新,快取完全同步,就會直接發回乙個

304 not modified

狀態碼,並且停止重發檔案內容,可以節省不必要的資料傳輸。

以上是靜態頁面的快取和更新控制機制,一般這一切都是由web伺服器直接包辦處理的,完全不需要使用者干預。但動態頁面就沒這麼幸運了,由於對動態頁面的請求,都是由web伺服器轉接給特定的頁面處理程式來完成,而且不會包辦其快取和更新的策略問題,所以這些控制就必須有程式設計師自己來完成了。然而更不幸的是,動態頁面處理程式自己是無法自動處理快取的,特別是整頁面級別的快取,我們可以在**裡快取乙個變數以便於下次呼叫,但仍然要執行很多程式**,能不能像靜態頁面那樣,給客戶端乙個last-modified

頭資訊,下次請求時再判斷這個時間和資料的更新時間,以便決定是否重複處理和傳送資料?

從以上分析來看這是完全可行的,不過需要對指令碼程式做特殊處理,也就是需要乙個邏輯來規範這個更新的檢測,當然這裡不是重點討論這個了。因為客戶端接受最後修改時間完全是依靠last-modified

頭資訊,所以只要動態指令碼能在發回內容的時候也輸出乙個時間作為判斷依據的話,那麼下次客戶端請求同乙個頁面(準確的說應該是同乙個url位址)的話,會把接收到的last-modified

頭資訊裡的時間也附加到if-modified-since請求過來。到了動態頁面這裡,我們就可以獲取到這個請求附帶的最後修改時間,然後先判斷時間點之後是否有新處理的資料,沒有新資料的話,我們就直接結束當前指令碼,就可以節省服務端資源。當然結束指令碼之前,需要發揮乙個304的狀態碼,因為要讓客戶端確認使用快取的話,也必須依賴這個狀態碼,所以只需要用動態指令碼發回乙個的304 not modified

頭資訊就可以了,不但節省了伺服器指令碼的執行資源,還節省了流量,可謂一舉兩得,而且應用形式更靈活更可控。

靜態頁面與動態頁面

靜態網頁 動態頁面 字尾.htm html shtml xml aspx asp jsp php perl cgi等 中標誌性的符號 特點無需經過伺服器的編譯,直接載入到客戶瀏覽器上顯示出來 能與後台資料庫進行互動,資料傳遞 靜態網頁,隨著html 的生成,頁面的內容和顯示效果就基本上不會發生變化了...

靜態頁面 動態頁面和偽靜態頁面的區別

1.靜態頁面 優點 相對於其他兩種頁面 動態頁面和偽靜態頁面 速度最快,而且不需要從資料庫裡面提取資料,速度快的同時,也不會對伺服器產生壓力。缺點 由於資料都是儲存在html裡面,所以導致檔案非常大。並且最嚴重的問題是,更改源 必須全部更改,而不能改乙個地方,全站靜態頁面就自動更改了。如果是大型 有...

將動態頁面轉成靜態頁面

static htm類用來處理將動態頁面轉化成靜態頁面。如下 using system using system.data using system.configuration using system.web using system.web.security using system.web.u...