HTTP協議 (四) 緩衝

來源:互聯網
上載者:User

之前寫過一個篇 【HTTP協議詳解】 ,這次繼續介紹HTTP協議中的緩衝機制。HTTP協議提供了非常強大的緩衝機制, 瞭解這些緩衝機制,對提高網站的效能非常有協助。 本文介紹瀏覽器和Web伺服器之間如何處理"瀏覽器緩衝",以及控制緩衝的http header.

本文會使用Fiddler來查看HTTP request和Response, 如果不熟悉這工具,可以先參考[Fiddler教程] 。在看本文的時候, 請務必開啟Fiddler來實踐。

閱讀目錄

  1. 緩衝的概念
  2. 緩衝的好處
  3. Fiddler可以方便地查看緩衝的header
  4. 如何判斷緩衝新鮮度
  5. 通過最後修改時間,判斷緩衝新鮮度
  6. 與緩衝相關的header
  7. ETag
  8. 瀏覽器不使用緩衝
  9. 直接使用緩衝,不去伺服器端驗證
  10. 如何設定IE不使用緩衝
  11. 公有緩衝和私人緩衝的區別

 

緩衝的概念

緩衝這個東西真的是無處不在, 有瀏覽器端的緩衝, 有伺服器端的緩衝,有Proxy 伺服器的緩衝, 有ASP.NET頁面緩衝,對象緩衝。 資料庫也有緩衝, 等等。

http中具有緩衝功能的是瀏覽器緩衝,以及緩衝Proxy 伺服器。

 

http緩衝的是指:當Web請求抵達緩衝時, 如果本地有“已緩衝的”副本,就可以從本機存放區裝置而不是從原始伺服器中提取這個文檔。

緩衝的好處

緩衝的好處是顯而易見的, 好處有,

1. 減少了冗餘的資料轉送,節省了網費。

2. 減少了伺服器的負擔, 大大提高了網站的效能

3. 加快了用戶端載入網頁的速度

 

Fiddler可以方便地查看緩衝的header

Fiddler中把header都分門別類的放在一起,這樣方便查看。

 

如何判斷緩衝新鮮度

Web伺服器通過2種方式來判斷瀏覽器緩衝是否是最新的。

第一種, 瀏覽器把快取檔案的最後修改時間通過 header ”If-Modified-Since“來告訴Web伺服器。

第二種, 瀏覽器把快取檔案的ETag, 通過header "If-None-Match", 來告訴Web伺服器。

 

通過最後修改時間, 來判斷緩衝新鮮度

1. 瀏覽器用戶端想請求一個文檔,  首先檢查本機快取,發現存在這個文檔的緩衝,  擷取緩衝中文檔的最後修改時間,通過: If-Modified-Since, 發送Request給Web伺服器。

2. Web伺服器收到Request,將伺服器的文檔修改時間(Last-Modified): 跟request header 中的,If-Modified-Since相比較, 如果時間是一樣的, 說明緩衝還是最新的, Web伺服器將發送304 Not Modified給瀏覽器用戶端, 告訴用戶端直接使用緩衝裡的版本。如。

3. 假如該文檔已經被更新了。Web伺服器將發送該文檔的最新版本給瀏覽器用戶端, 如。

 

執行個體: 開啟Fiddler, 然後開啟部落格園首頁。然後F5重新整理幾次瀏覽器。 你會看到部落格園首頁也用了緩衝。

 

與緩衝有關的header

我們來看看每個header的具體含義。

Request

Cache-Control: max-age=0 以秒為單位
If-Modified-Since: Mon, 19 Nov 2012 08:38:01 GMT 快取檔案的最後修改時間。
If-None-Match: "0693f67a67cc1:0" 快取檔案的Etag值
Cache-Control: no-cache 不使用緩衝
Pragma: no-cache 不使用緩衝
   

 

 

    

 

 

 

Response

Cache-Control: public 響應被緩衝,並且在多使用者間共用,  (公有緩衝和私人緩衝的區別,請看另一節)
Cache-Control: private 響應只能作為私人緩衝,不能在使用者之間共用
Cache-Control:no-cache 提醒瀏覽器要從伺服器提取文檔進行驗證
Cache-Control:no-store 絕對禁止緩衝(用於機密,敏感檔案)
Cache-Control: max-age=60 60秒之後緩衝到期(相對時間)
Date: Mon, 19 Nov 2012 08:39:00 GMT 當前response發送的時間
Expires: Mon, 19 Nov 2012 08:40:01 GMT 緩衝到期的時間(絕對時間)
Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT 伺服器端檔案的最後修改時間
ETag: "20b1add7ec1cd1:0" 伺服器端檔案的Etag值

 

 

 

 

 

 

 

 

 

 

如果同時存在cache-control和Expires怎麼辦呢?
瀏覽器總是優先使用cache-control,如果沒有cache-control才考慮Expires  

 

ETag

ETag是實體標籤(Entity Tag)的縮寫, 根據實體內容產生的一段hash字串(類似於MD5或者SHA1之後的結果),可以標識資源的狀態。 當資源發送改變時,ETag也隨之發生變化。

ETag是Web服務端產生的,然後發給瀏覽器用戶端。瀏覽器用戶端是不用關心Etag是如何產生的。

為什麼使用ETag呢? 主要是為瞭解決Last-Modified 無法解決的一些問題。

1. 某些伺服器不能精確得到檔案的最後修改時間, 這樣就無法通過最後修改時間來判斷檔案是否更新了。

2. 某些檔案的修改非常頻繁,在秒以下的時間內進行修改. Last-Modified只能精確到秒。

3. 一些檔案的最後修改時間改變了,但是內容並未改變。 我們不希望用戶端認為這個檔案修改了。

 

執行個體, 開啟Fiddler, 開啟部落格園首頁。  你可以看到很多圖片,或者CSS檔案都是用了緩衝。 這些都是通過比較ETag的值,來判斷檔案是否更新了。

 

瀏覽器不使用緩衝

CTRL+F5強制重新整理瀏覽器,或者設定IE。  可以讓瀏覽器不使用緩衝。

1. 瀏覽器發送Http request, 給Web 服務器, header中帶有Cache-Control: no-cache.   明確告訴Web伺服器,用戶端不使用緩衝。 

2. Web伺服器將把最新的文檔發送給瀏覽器用戶端.

 

執行個體:

開啟Fiddler, 開啟部落格園首頁, 然後按CTRL+F5強制重新整理瀏覽器,你將看到

Pragma: no-cache的作用和Cache-Control: no-cache一模一樣。 都是不使用緩衝。 

Pragma: no-cache 是HTTP 1.0中定義的, 所以為了相容HTTP 1.0. 所以會同時使用Pragma: no-cache和Cache-Control: no-cache

 

直接使用緩衝,不去伺服器驗證

按F5重新整理瀏覽器和在地址欄裡輸入網址然後斷行符號。 這兩個行為是不一樣的。

按F5重新整理瀏覽器, 瀏覽器會去Web伺服器驗證緩衝。

如果是在地址欄輸入網址然後斷行符號,瀏覽器會"直接使用有效緩衝", 而不會發http request 去伺服器驗證緩衝,這種情況叫做快取命中,如

 

執行個體: 比較第一次訪問部落格園首頁和第二次部落格園首頁

1. 啟動Fiddler, 用firefox開啟部落格園首頁, 發現有50多個session。

2. 按CTRL+X將Fiddler中的所有session刪除。 關閉firefox,重新開啟一個firefox,開啟部落格園首頁。   發現只有30多個session.

分析;  少了的session是因為firefox直接用了緩衝,而沒有發http request。

 

 

如何設定IE不使用緩衝

開啟IE。點擊工具列上的, 工具->Internet選項->常規->瀏覽歷程記錄 設定. 選擇“從不”。然後儲存。

然後點擊“刪除”  把Internet臨時檔案都刪掉 (IE緩衝的檔案就是Internet臨時檔案)。

 

公有緩衝和私人緩衝的區別

Cache-Control: public 指可以公有緩衝, 可以是數千名使用者共用的。

Cache-Control: private 指只支援私人緩衝, 私人緩衝是單個使用者專用的。

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.