Http緩存機制

這個文章裏面說了很多 《面向站長和網站管理員的Web緩存加速指南》  裏面也有提到CDN(Content Delivery Network)

 

HTTP/1.1中緩存的目的是爲了在很多情況下減少發送請求,也即直接返回緩存;同時在許多情況下可以不需要發送完整響應。前者減少了網絡迴路的數量,挺高響應速度,HTTP利用一個“過期(expiration)”機制來爲此目的。後者減少了網絡應用的帶寬,HTTP用“驗證(validation)”機制來爲此目的。

HTTP定義了3種緩存機制:

l Freshness allows a response to be used without re-checking it on the origin server, and can be controlled by both the server and the client. For example, the Expires response header gives a date when the document becomes stale, and the Cache-Control: max-age directive tells the cache how many seconds the response is fresh for.

l Validation can be used to check whether a cached response is still good after it becomes stale. For example, if the response has a Last-Modified header, a cache can make a conditional request using the If-Modified-Since header to see if it has changed.

l Invalidation is usually a side effect of another request that passes through the cache. For example, if URL associated with a cached response subsequently gets a POST, PUT or DELETE request, the cached response will be invalidated.

 

緩存如何工作

所有的緩存都用一套規則來幫助他們決定什麼時候使用緩存中的副本提供服務(假設有副本可用的情況下);一些規則在協議中有定義(HTTP協議1.0和1.1),一些規則由緩存的管理員設置(瀏覽器的用戶或者代理服務器的管理員);
一般說來:遵循以下基本的規則(不必擔心,你不必知道所有的細節,細節將隨後說明)

  1. 如果響應頭信息:告訴緩存器不要保留緩存,緩存器就不會緩存相應內容;
  2. 如果請求信息是需要認證或者安全加密的,相應內容也不會被緩存;
  3. 如果在迴應中不存在校驗器(ETag或者Last-Modified頭信息),緩存服務器會認爲缺乏直接的更新度信息,內容將會被認爲不可緩存。
  4. 一個緩存的副本如果含有以下信息:內容將會被認爲是足夠新的
    • 含有完整的過期時間和壽命控制頭信息,並且內容仍在保鮮期內;
    • 瀏覽器已經使用過緩存副本,並且在一個會話中已經檢查過內容的新鮮度;
    • 緩存代理服務器近期內已經使用過緩存副本,並且內容的最後更新時間在上次使用期之前;
    • 夠新的副本將直接從緩存中送出,而不會向源服務器發送請求;
  5. 如果緩存的副本已經太舊了,緩存服務器將向源服務器發出請求校驗請求,用於確定是否可以繼續使用當前拷貝繼續服務;

總之:新鮮度校驗是確定內容是否可用的最重要途徑:

 

如果副本足夠新,從緩存中提取就立刻能用了;
而經緩存器校驗後發現副本的原件沒有變化,系統也會避免將副本內容從源服務器整個重新傳輸一遍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章