使用 Azure Front Door 快取

重要

Azure Front Door(傳統版)將於 2027 年 3 月 31 日淘汰。 為了避免任何服務中斷,請務必在 2027 年 3 月之前將 Azure Front Door (傳統) 配置檔移轉至 Azure Front Door Standard 或 進階版 層。 如需詳細資訊,請參閱 Azure Front Door(傳統版)淘汰

Azure Front Door 是新式內容傳遞網路 (CDN),具有動態網站加速和負載平衡功能。 在您的路由上設定快取時,接收每個要求的邊緣網站會檢查其快取是否有有效的回應。 快取有助於減少傳送至源伺服器的流量。 如果沒有可用的快取回應,要求會轉送至來源。

每個 Front Door 邊緣網站都會管理自己的快取,而要求可能會由不同的邊緣網站提供服務。 因此,即使您提供快取的回應,您仍可能會看到一些流量到達您的來源。

快取可大幅降低延遲,並減少原始伺服器上的負載。 不過,並非所有類型的流量都能受益於快取。 映像、CSS 和 JavaScript 檔案等靜態資產非常適合用於快取。 雖然是動態資產,例如已驗證的 API 端點,不應該快取以防止個人資訊外洩。 建議針對靜態和動態資產有個別的路由,並停用對於後者的快取。

警告

啟用快取之前,請先徹底檢閱公用檔,並在啟用快取之前測試所有可能的案例。 如先前所述,設定錯誤時,您可能會意外快取多個使用者產生的隱私權事件所共用的使用者特定資料。

要求方法

只有使用 GET 要求方法的要求是可快取的。 所有其他要求方法一律會透過網路進行代理。

傳遞大型檔案

Azure Front Door 提供沒有檔案大小上限的大型檔案。 如果已啟用快取,Front Door 會使用稱為 對象區塊化的技術。 要求大型檔案時,Front Door 會從來源擷取較小的檔案片段。 Front Door 收到完整檔案要求或位元組範圍檔案要求之後,Front Door 環境會以 8 MB 的區塊要求原始來源要求檔案。

區塊到達 Azure Front Door 環境之後,會快取並立即提供給使用者。 Front Door 接著會以平行的方式預先擷取下一個區塊。 此預先擷取可確保內容在使用者之前保持一個區塊,以減少延遲。 此程式會繼續進行,直到下載整個檔案(如果已要求)或用戶端關閉連線為止。 如需位元組範圍要求的詳細資訊,請參閱 RFC 7233

Front Door 會在收到任何區塊時快取任何區塊,因此不需要在 Front Door 快取上快取整個檔案。 從快取提供檔案或位元組範圍的後續要求。 如果區塊並非全部快取,則會使用預先擷取來要求來源的區塊。

此優化依賴來源支援位元組範圍要求的能力。 如果來源不支援位元組範圍要求,或未正確處理範圍要求,則此優化無效。

當您的來源以 Range 標頭回應要求時,它必須以下列其中一種方式回應:

  • 傳回範圍回應。 回應必須使用 HTTP 狀態代碼 206。 此外, Content-Range 回應標頭必須存在,而且必須符合來源傳回之內容的實際長度。 如果您的來源未以有效值傳送正確的響應標頭,Azure Front Door 不會快取回應,而且您可能會看到不一致的行為。

    提示

    如果您的原始來源壓縮回應,請確定 Content-Range 標頭值符合壓縮響應的實際長度。

  • 傳回非範圍回應。 如果您的來源無法處理範圍要求,它可以忽略 Range 標頭,並傳回未排列的回應。 確定來源傳回 206 以外的響應狀態代碼。 例如,原點可能會傳回 200 OK 回應。

如果來源使用區塊傳輸編碼 (CTE) 將數據傳送至 Azure Front Door POP,則不支援大於 8 MB 的回應大小。

檔案壓縮

Azure Front Door(傳統版)可以在邊緣動態壓縮內容,進而縮短用戶端的回應時間。 為了讓檔案符合壓縮資格,必須啟用快取,而且檔案必須是MIME類型才能符合壓縮資格。 目前,Front Door (傳統) 不允許變更此清單。 目前的清單為:

  • “application/eot”
  • “application/font”
  • “application/font-sfnt”
  • “application/javascript”
  • “application/json”
  • “application/opentype”
  • “application/otf”
  • “application/pkcs7-mime”
  • “application/truetype”
  • “application/ttf”,
  • “application/vnd.ms-fontobject”
  • “application/xhtml+xml”
  • “application/xml”
  • “application/xml+rss”
  • “application/x-font-opentype”
  • “application/x-font-truetype”
  • “application/x-font-ttf”
  • “application/x-httpd-cgi”
  • “application/x-mpegurl”
  • “application/x-opentype”
  • “application/x-otf”
  • “application/x-perl”
  • “application/x-ttf”
  • “application/x-javascript”
  • “font/eot”
  • “font/ttf”
  • “font/otf”
  • “font/opentype”
  • “image/svg+xml”
  • “text/css”
  • “text/csv”
  • “text/html”
  • “text/javascript”
  • “text/js”、“text/plain”
  • “text/richtext”
  • “text/tab-separated-values”
  • “text/xml”
  • “text/x-script”
  • “text/x-component”
  • “text/x-java-source”

此外,檔案的大小也必須介於 1 KB 到 8 MB 之間,且包含。

這些設定檔支援下列壓縮編碼:

如果要求支援 gzip 和 Brotli 壓縮,Brotli 壓縮優先。

當資產的要求指定壓縮,而要求會導致快取遺漏時,Azure Front Door (傳統)會在 POP 伺服器上直接壓縮資產。 之後會從快取提供壓縮的檔案。 產生的專案會以回應標頭傳 Transfer-Encoding: chunked 回。

如果來源使用區塊傳輸編碼 (CTE) 將數據傳送至 Azure Front Door POP,則不支援壓縮。

注意

範圍要求可能會壓縮成不同的大小。 Azure Front Door 要求任何 GET HTTP 要求的內容長度值必須相同。 如果客戶端傳送的位元組範圍要求具有 Accept-Encoding 導致 Origin 回應的不同內容長度,則 Azure Front Door 會傳回 503 錯誤。 您可以停用來源的壓縮,或建立規則引擎規則,從位元組範圍要求的要求中移除 Accept-Encoding 標頭。

查詢字串行為

透過 Azure Front Door,您可以控制如何快取包含查詢字串的 Web 要求檔案。

在具有查詢字串的 Web 要求中,查詢字串是要求在問號之後發生的部分 。? 查詢字串可以包含一或多個索引鍵/值組,其中功能變數名稱及其值會以等號 (=) 分隔。 每個索引鍵/值組會以連字元分隔(&)。

例如,URL http://www.contoso.com/content.mov?field1=value1&field2=value2 包含兩個查詢字串:

  • field1,值為 value1
  • field2,值為 value2

如果在要求的查詢字串中有多個索引鍵/值組,則其順序並不重要。

當您設定快取時,您會指定快取應該如何處理查詢字串。 支援下列行為:

  • 忽略查詢字串:在此模式中,Azure Front Door 會在第一個要求時,將查詢字串從客戶端傳遞至來源,並快取資產。 從 Front Door 環境提供之資產的未來要求會忽略查詢字串,直到快取的資產到期為止。

  • 使用查詢字串:在此模式中,每個具有唯一 URL 的要求,包括查詢字串,都會被視為具有其本身快取的唯一資產。 例如,來自要求 www.example.ashx?q=test1 的來源回應會在 Front Door 環境中快取,並針對具有相同查詢字串的後置快取傳回。 的要求 www.example.ashx?q=test2 會快取為具有其存留時間設定的個別資產。

    查詢字串參數的順序並不重要。 例如,如果 Azure Front Door 環境包含 URL www.example.ashx?q=test1&r=test2的快取回應,則也會從快取提供 要求 www.example.ashx?r=test2&q=test1

  • 忽略指定的查詢字串包含指定的查詢字串:在此模式中,您可以設定 Azure Front Door 在產生快取索引鍵時包含或排除指定的參數。

    例如,假設預設快取索引鍵為 /foo/image/asset.html,而且對URL https://contoso.com/foo/image/asset.html?language=EN&userid=100&sessionid=200提出要求。 如果有規則引擎規則可排除 userid 查詢字串參數,則查詢字串快取索引鍵會是 /foo/image/asset.html?language=EN&sessionid=200

在 Front Door 路由上設定查詢字串行為。

快取清除

若要瞭解如何設定快取清除,請參閱 Azure Front Door 中的快取清除。

Azure Front Door 將會快取資產,直到資產的存留時間 (TTL) 到期為止。 每當用戶端要求已過期 TTL 的資產時,Front Door 環境就會擷取資產的新更新複本,以提供要求,然後儲存重新整理的快取。

確保使用者一律取得最新資產復本的最佳做法是為每個更新版本資產進行版本,並將其發佈為新的 URL。 Front Door 會立即擷取下一個用戶端要求的新資產。 有時候,您可能想要清除所有邊緣節點的快取內容,並強制全部擷取新的更新資產。 原因可能是因為 Web 應用程式的更新,或快速更新包含不正確信息的資產。

快取清除按鈕和頁面的螢幕快照。

選取您想要從邊緣節點清除的資產。 若要清除所有資產,請選取 [ 全部清除]。 否則,在 [路徑] 中,輸入您想要清除之每個資產的路徑。

要清除的路徑清單支援這些格式:

  • 單一路徑清除:藉由指定資產的完整路徑來清除個別資產(不含通訊協定和網域),例如 /pictures/strasbourg.png;
  • 通配符清除:星號 \ 可以當做通配符使用。 清除路徑中具有 /* 端點下的所有資料夾、子資料夾和檔案,或藉由指定資料夾後面接著 /*,以清除特定資料夾下的所有子資料夾和檔案,例如 /pictures/*。
  • 根域清除:清除路徑中具有 「/」 的端點根目錄。

注意

清除通配符網域:如本節所述指定清除的快取路徑不適用於任何與 Front Door 相關聯的通配符網域。 目前,我們不支援直接清除通配符網域。 您可以藉由指定specfic子域和清除路徑,從特定子域清除路徑。 例如,如果我的 Front Door 有 *.contoso.com,我可以輸入 foo.contoso.com/path/*來清除子域foo.contoso.com的資產。 目前,如果適用,在清除內容路徑中指定主機名僅限於通配符網域的子域。

Front Door 上的快取清除不區分大小寫。 此外,它們與查詢字串無關,這表示清除URL會清除它的所有查詢字串變化。

快取到期

下列標頭順序可用來判斷專案儲存在我們的快取中多久:

  1. Cache-Control: s-maxage=<seconds>
  2. Cache-Control: max-age=<seconds>
  3. Expires: <http-date>

某些 Cache-Control 回應標頭值表示無法快取回應。 這些值包括 privateno-cacheno-store。 Front Door 會接受這些標頭值,而且不會快取回應,即使您使用規則引擎覆寫快取行為也一樣。

Cache-Control如果來源的回應上沒有標頭,Front Door 預設會隨機決定一到三天的快取持續時間。

注意

快取到期不能大於 366 天

REVALIDATED_HIT您可能會在Cache-Control回應標頭中看到 。 這表示 Azure Front Door 中的快取內容在提供給用戶端之前,已使用源伺服器重新驗證。 當快取的內容已過期,但源伺服器指出內容尚未變更時,就會發生這種情況。 在此情況下,快取的內容會提供給用戶端,並重設快取到期日。

要求標頭

啟用快取時,下列要求標頭不會轉送至來源:

  • Content-Length
  • Transfer-Encoding
  • Accept
  • Accept-Charset
  • Accept-Language

回應標頭

如果原始回應可快取,則會 Set-Cookie 先移除標頭,再將回應傳送至用戶端。 如果原始回應無法快取,Front Door 不會移除標頭。 例如,如果原始回應包含 Cache-Control 具有 max-age 值的標頭,表示 Front Door 的回應可快取,而且 Set-Cookie 會移除標頭。

此外,Front Door 會將 X-Cache 標頭附加至所有回應。 X-Cache回應標頭包含下列其中一個值:

  • TCP_HITTCP_REMOTE_HIT:回應的前 8 MB 區塊是快取點擊,且內容會從 Front Door 快取提供。
  • TCP_MISS:回應的前 8 MB 區塊是快取遺漏,而且內容是從來源擷取。
  • PRIVATE_NOSTORE:無法快取要求,因為 Cache-Control 回應標頭設定為 私用無存放區
  • CONFIG_NOCACHE:要求已設定為不要在 Front Door 配置檔中快取。

記錄和報告

存取 記錄 包含每個要求的快取狀態。 此外, 報告 也包含如何在應用程式中使用 Azure Front Door 快取的相關信息。

存取 記錄 包含每個要求的快取狀態。

快取行為和持續時間

快取行為和持續時間可以在規則引擎中設定。 規則引擎快取組態一律會覆寫路由設定。

  • 停用快取時,不論原始回應指示詞為何,Azure Front Door 都不會快取響應內容。

  • 啟用快取時,快取行為會根據規則引擎所套用的快取行為值而有所不同:

    • 榮譽來源:Azure Front Door 一律接受原始響應標頭指示詞。 如果遺漏原始指示詞,Azure Front Door 會快取任何從一到三天的內容。
    • 覆寫一律:Azure Front Door 一律會覆寫快取持續時間,這表示它會快取快取期間的內容,而忽略來自原始回應指示詞的值。 只有在回應可快取時,才會套用此行為。
    • 如果來源遺失,請覆寫:如果來源未傳回快取 TTL 值,Azure Front Door 會使用指定的快取持續時間。 只有在回應可快取時,才會套用此行為。

注意

  • Azure Front Door 不保證內容儲存在快取中的時間量。 如果內容不常使用,可以在內容到期之前從邊緣快取中移除快取內容。 即使快取的數據已過期,Front Door 也可以從快取提供數據。 當來源離線時,此行為可協助您的網站保持部分可用。
  • 來源可能會指定不要使用 Cache-Control 標頭來快取特定回應,其值為 no-cache、private 或 no-store。 當用於從源伺服器到 Azure Front Door POP 的 HTTP 回應時,Azure Front Door 支援快取控制指示詞,並接受 RFC 7234 - 超文本傳輸通訊協定 (HTTP/1.1): 快取 (ietf.org) 中的快取行為。

快取行為和持續時間可以在 Front Door 設計工具路由規則和規則引擎中設定。 規則引擎快取設定一律會覆寫 Front Door 設計工具路由規則設定。

  • 停用快取時,不論原始回應指示詞為何,Azure Front Door (傳統)都不會快取響應內容。

  • 啟用快取時,快取行為會因使用快取默認持續時間的不同值而有所不同。

    • 當 [使用快取默認持續時間] 設定為 [是] 時,Azure Front Door (傳統) 一律接受原始響應標頭指示詞。 如果來源指示詞遺失,Front Door 會將內容快取到一到三天的任何位置。
    • 當 [使用快取預設持續時間] 設定為 [否] 時,Azure Front Door (傳統)一律會覆寫快取持續時間(必要字段),這表示它會快取快取期間的內容,而忽略來自來源回應指示詞的值。

注意

  • Azure Front Door (傳統) 不保證內容儲存在快取中的時間量。 如果內容不常使用,可以在內容到期之前從邊緣快取中移除快取內容。 即使快取的數據已過期,Azure Front Door (傳統版)仍可處理快取中的數據。 當來源離線時,此行為可協助您的網站保持部分可用。
  • Front Door 設計工具路由規則中設定的快取持續時間最小快取持續時間。 如果來源快取控件標頭的TTL大於覆寫值,此覆寫將無法運作。

下一步