HTTP的請求頭標籤 If-Modified-Since

一直以來沒有留意過HTTP請求頭的IMS(If-Modified-Since)標籤。瀏覽器

最近在分析Squid的access.log日誌文件時,發現了一個現象。
就是即便是對同一個文件進行HTTP請求,第一次和第二次產生的網絡流量數據也是不一致的。緩存


在調查的過程當中,逐漸瞭解了HTTP的If-Modified-Since的頭標籤的做用。服務器

 

你們都知道客戶端瀏覽器是有緩存的,裏面存放以前訪問過的一些網頁文件。
例如IE,會把緩存文件存到「C:\Documents and Settings\zh2000g\Local Settings\Temporary Internet Files」
這樣相似的目錄裏。
其實緩存裏存儲的不僅是網頁文件,還有服務器發過來的該文件的最後服務器修改時間。網絡


If-Modified-Since是標準的HTTP請求頭標籤,在發送HTTP請求時,把瀏覽器端緩存頁面的最後修改時間一塊兒發到服務器去,服務器會把這個時間與服務器上實際文件的最後修改時間進行比較。併發

若是時間一致,那麼返回HTTP狀態碼304(不返回文件內容),客戶端接到以後,就直接把本地緩存文件顯示到瀏覽器中。編輯器

若是時間不一致,就返回HTTP狀態碼200和新的文件內容,客戶端接到以後,會丟棄舊文件,把新文件緩存起來,並顯示到瀏覽器中。工具

 下面用一個簡單的小例子說明一下。ui

因爲演示例子須要截取HTTP Request和Response的信息,我在這裏使用的工具是Fiddler。
感興趣的朋友能夠到【http://www.fiddler2.com/Fiddler2/version.asp】去下載。日誌

 

1.首先在服務器建立一個簡單的HTML文件,用瀏覽器訪問一下,成功表示HTML頁面。Fiddler就會產生下面的捕獲信息。
  須要留意的是
  (1)由於是第一次訪問該頁面,客戶端發請求時,請求頭中沒有If-Modified-Since標籤。
  (2)服務器返回的HTTP狀態碼是200,併發送頁面的所有內容。
  (3)服務器返回的HTTP頭標籤中有Last-Modified,告訴客戶端頁面的最後修改時間。  
  
2.在瀏覽器中刷新一下頁面,Fiddler就會產生下面的捕獲信息。
  須要注意的是
  (1)客戶端發HTTP請求時,使用If-Modified-Since標籤,把上次服務器告訴它的文件最後修改時間返回到服務器端了。
  (2)由於文件沒有改動過,因此服務器返回的HTTP狀態碼是304,沒有發送頁面的內容。
 blog

 

3.用文本編輯器稍微改動一下頁面文件,保存。再用瀏覽器訪問一下,Fiddler就會產生下面的捕獲信息。
須要留意的是
  (1)客戶端發HTTP請求時,使用If-Modified-Since標籤,把上次服務器告訴它的文件最後修改時間返回到服務器端了。
  (2)由於文件被改動過,兩邊時間不一致,因此服務器返回的HTTP狀態碼是200,併發送新頁面的所有內容。
  (3)服務器返回的HTTP頭標籤中有Last-Modified,告訴客戶端頁面的新的最後修改時間。

 

 

HTTP的If-Modified-Since頭標籤與客戶端緩存相互配合,大大節約了網絡流量。

相關文章
相關標籤/搜索