共用方式為


快取如何運作 \(機器翻譯\)

本文提供一般快取概念的概觀,以及 Azure 內容傳遞網路 如何使用快取來改善效能。 如果您想要瞭解如何在內容傳遞網路端點上自定義快取行為,請參閱使用快取規則控制 Azure 內容傳遞網路 快取行為,以及使用查詢字串控制 Azure 內容傳遞網路 快取行為。

快取簡介

快取是將數據儲存在本機的程式,以便更快速地存取該數據的未來要求。 在最常見的快取類型中,網頁瀏覽器快取會將靜態數據的復本儲存在本機硬碟上。 透過使用快取,網頁瀏覽器可以避免多次往返伺服器,而改為在本機存取相同的數據,從而節省時間和資源。 快取非常適合在本機管理小型靜態數據,例如靜態影像、CSS 檔案和 JavaScript 檔案。

同樣地,快取是由靠近使用者的邊緣伺服器上的內容傳遞網路所使用,以避免要求返回來源,並減少用戶延遲。 不同於只用於單一使用者的網頁瀏覽器快取,內容傳遞網路具有共用快取。 在內容傳遞網路共用快取中,使用者可以使用其他用戶的檔案要求,這可大幅減少對源伺服器的要求數目。

無法快取經常變更或對個別使用者而言唯一的動態資源。 不過,這些類型的資源可以利用 Azure 內容傳遞網路上的動態網站加速 (DSA) 優化,以提升效能。

快取可能發生在源伺服器與使用者之間的多個層級:

  • 網頁伺服器:使用共用快取(適用於多個使用者)。
  • 內容傳遞網路:使用共用快取 (適用於多個使用者)。
  • 因特網服務提供者(ISP):使用共用快取(適用於多個使用者)。
  • 網頁瀏覽器:使用私人快取(適用於一位使用者)。

每個快取通常會管理自己的資源新鮮度,並在檔案過時時執行驗證。 此行為定義於 HTTP 快取規格 RFC 7234 中。

資源新鮮度

由於快取的資源可能已過期或過時(與源伺服器上的對應資源相比),因此任何快取機制都必須控制內容何時重新整理。 為了節省時間和頻寬耗用量,快取的資源並不會在每次存取時都比較原始伺服器上的版本。 相反地,只要快取的資源被視為是全新的,就會假設是最新版本,並直接傳送至用戶端。 當快取資源的存在時間小於快取設定所定義的存在時間或期間,就會視為全新的。 例如,當瀏覽器重載網頁時,它會確認硬碟上的每個快取資源都已全新,並加以載入。 如果資源不是最新的(過時),則會從伺服器載入最新的複本。

驗證

如果資源被視為過時,系統會要求源伺服器進行驗證,以判斷快取中的數據是否仍符合源伺服器上的內容。 如果源伺服器上已修改檔案,快取會更新其資源版本。 否則,如果資源是全新的,數據會直接從快取傳遞,而不需要先加以驗證。

內容傳遞網路快取

快取是內容傳遞網路運作方式不可或缺的一部分,可加快傳遞速度,並減少影像、字型和影片等靜態資產的原始負載。 在內容傳遞網路快取中,靜態資源會選擇性地儲存在對使用者更本機的伺服器,並提供下列優點:

  • 由於大部分的 Web 流量都是靜態的(例如影像、字型和影片),所以內容傳遞網路快取會藉由將內容移至用戶來減少網路等待時間,進而減少數據移動的距離。

  • 藉由將工作卸除至內容傳遞網路,快取可以減少來源伺服器上的網路流量和負載。 這樣做可降低應用程式的成本和資源需求,即使有大量的使用者也是如此。

類似於在網頁瀏覽器中實作快取的方式,您可以藉由傳送快取指示詞標頭來控制快取在內容傳遞網路中執行的方式。 快取指示詞標頭是 HTTP 標頭,通常由源伺服器新增。 雖然這些標頭大部分原本是設計來尋址用戶端瀏覽器中的快取,但它們現在也供所有中繼快取使用,例如內容傳遞網路。

兩個標頭可用來定義快取新鮮度: Cache-ControlExpiresCache-Control 較目前的 ,如果兩者都存在,則優先於 Expires。 也有兩種類型的標頭用於驗證(稱為驗證程式): ETagLast-ModifiedETag 較目前的 ,如果兩者都已定義,則優先於 Last-Modified

Cache-directive 標頭

重要

根據預設,針對 DSA 優化的 Azure 內容傳遞網路 端點會忽略快取指示詞標頭,並略過快取。 針對來自 Edgio 配置檔的 Azure CDN 標準,您可以使用內容傳遞網路快取規則來啟用快取,來調整 Azure 內容傳遞網路 端點如何處理這些標頭。 針對僅限來自 Edgio 配置檔的 Azure CDN 進階版,您可以使用規則引擎來啟用快取。

Azure 內容傳遞網路 支援下列 HTTP 快取指示詞標頭,其定義快取持續時間和快取共用。

Cache-Control:

  • 在 HTTP 1.1 中引進,可讓 Web 發行者更充分掌控其內容,並解決標頭的限制 Expires
  • Expires如果 和 都已定義,Cache-Control則覆寫標頭。
  • 當用於從用戶端到內容傳遞網路 POP 的 HTTP 要求時,Cache-Control預設會由所有 Azure 內容傳遞網路 設定檔忽略。
  • 當用於從源伺服器到內容傳遞網路 POP 的 HTTP 回應時:
    • 來自 Edgio 的 Azure CDN Standard/進階版 和 Microsoft 的 Azure CDN Standard 都支援所有Cache-Control指示詞。
    • 來自 Edgio 的 Azure CDN 標準/進階版 和 Microsoft 的 Azure CDN 標準會接受 RFC 7234 - 超文字傳輸通訊協定 (HTTP/1.1): 快取 (ietf.org) 中的快取行為。

到期:

  • HTTP 1.0 中引進的舊版標頭;支援回溯相容性。
  • 使用以日期為基礎的到期時間與第二個有效位數。
  • 類似於 Cache-Control: max-age
  • 不存在時 Cache-Control 使用。

Pragma:

  • 根據預設,Azure 內容傳遞網路 不接受。
  • HTTP 1.0 中引進的舊版標頭;支援回溯相容性。
  • 作為具有下列指示詞的用戶端要求標頭: no-cache。 此指示詞會指示伺服器傳遞新版的資源。
  • Pragma: no-cache 等於 Cache-Control: no-cache

驗證

當快取過時時,會使用 HTTP 快取驗證程式來比較檔案的快取版本與源伺服器上的版本。 來自 Edgio 的 Azure CDN Standard/進階版 預設同時支援 ETagLast-Modified 驗證程式,而來自 Microsoft 的 Azure CDN Standard 僅Last-Modified支援 。

Etag:

  • 根據預設,來自 Edgio 的 Azure CDN Standard/進階版 支援ETag,而來自 Microsoft 的 Azure CDN Standard 則不支援。
  • ETag 定義每個檔案和檔案版本唯一的字串。 例如: ETag: "17f0ddd99ed5bbe4edffdd6496d7131f"
  • 在 HTTP 1.1 中引進,且比 目前版本還多 Last-Modified。 當上次修改的日期難以判斷時很有用。
  • 支援強式驗證和弱式驗證;不過,Azure 內容傳遞網路 僅支持強式驗證。 若要進行強式驗證,這兩個資源表示法必須是位元組對位元組的相同。
  • 快取會藉由在要求中傳送具有If-None-Match一或多個ETag驗證器的標頭,ETag來驗證所使用的檔案。 例如: If-None-Match: "17f0ddd99ed5bbe4edffdd6496d7131f" 。 如果伺服器的版本符合 ETag 清單中的驗證程式,則會在其回應中傳送狀態代碼 304(未修改)。 如果版本不同,伺服器會以狀態代碼 200 (確定) 和更新的資源回應。

上次修改日期:

  • 僅適用於來自 Edgio 的 Azure CDN Standard/進階版,如果ETag不是 HTTP 回應的一部分,Last-Modified則會使用 。
  • 指定源伺服器的上次修改資源的日期和時間。 例如: Last-Modified: Thu, 19 Oct 2017 09:28:00 GMT
  • 快取會 Last-Modified 藉由在要求中傳送 If-Modified-Since 具有日期和時間的標頭,來驗證檔案。 源伺服器會比較該日期與 Last-Modified 最新資源的標頭。 如果資源自指定時間之後尚未修改,伺服器會在其回應中傳回狀態代碼 304(未修改)。 如果資源已修改,伺服器會傳回狀態代碼 200 (確定) 和更新的資源。

判斷哪些檔案可以快取

並非所有資源都可以快取。 下表根據 HTTP 回應的類型,顯示可以快取哪些資源。 使用不符合上述所有條件的 HTTP 回應傳遞的資源無法快取。 針對僅限 Edgio 的 Azure CDN 進階版,您可以使用規則引擎來自定義其中一些條件。

Microsoft 的 Azure 內容傳遞網路 來自 Edgio 的 Azure 內容傳遞網路
HTTP 狀態碼 200, 203, 206, 300, 301, 410, 416 200
HTTP 方法 GET、HEAD GET
檔案大小限制 300 GB 300 GB

若要讓 來自 Microsoft 快取的 Azure CDN Standard 在資源上運作,源伺服器必須支援任何 HEAD 和 GET HTTP 要求,而且資產的任何 HEAD 和 GET HTTP 回應都必須相同內容長度值。 對於 HEAD 要求,源伺服器必須支援 HEAD 要求,而且必須回應與收到 GET 要求相同的標頭。

默認快取行為

下表描述 Azure 內容傳遞網路 產品及其優化的預設快取行為。

Microsoft:一般 Web 傳遞 Edgio:一般 Web 傳遞 Edgio:DSA
榮譽起源 Yes .是 No
內容傳遞網路快取持續時間 兩天天 七天

榮譽來源:指定是否在源伺服器的 HTTP 回應中存在支援的快取指示詞標頭。

CDN 快取持續時間:指定資源在 Azure 內容傳遞網路上快取的時間量。 不過,如果 Honor 來源為 Yes,且源伺服器的 HTTP 回應包含 cache-directive 標頭ExpiresCache-Control: max-age,Azure 內容傳遞網路 會改用標頭指定的持續時間值。

注意

Azure 內容傳遞網路 不保證物件將儲存在快取中的最短時間量。 快取的內容可能會在內容傳遞網路快取到期之前被收回,如果內容不要求的頻率,以騰出空間供更頻繁要求的內容使用。

下一步

  • 若要瞭解如何透過快取規則自定義和覆寫內容傳遞網路上的預設快取行為,請參閱使用快取規則控制 Azure 內容傳遞網路 快取行為。
  • 若要瞭解如何使用查詢字串來控制快取行為,請參閱使用查詢字元串控制 Azure 內容傳遞網路 快取行為。