根據查詢字串參數快取內容 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

根據查詢字串參數快取內容

有些 Web 應用程式使用查詢字串來傳送資訊到原始伺服器。查詢字串是 Web 請求的一部分,其顯示在 ? 字元之後;此字串可包含以 & 字元分隔的一或多個參數。在下列範例中,查詢字串包含兩個參數,color=redsize=large

https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large

對於發行版,您可以選擇是否 CloudFront 要將查詢字串轉寄至來源,以及是否要根據所有參數或選取的參數快取內容。為什麼說這可能很有用? 請考量下列範例。

假設您的網站提供五種語言。網站所有五種版本的目錄結構和檔案名稱都相同。當使用者檢視您的網站時,會根據使用者選擇的語言來轉寄要 CloudFront 包含語言查詢字串參數的要求。您可以設定 CloudFront 將查詢字串轉寄至來源,並根據語言參數進行快取。如果您將 Web 伺服器設定為傳回與所選語言對應的指定頁面版本,則會根據語言查詢字串參數的值個別 CloudFront快取每個語言版本。

在此範例中,如果您網站的主要頁面是main.html,下列五個請求會導 CloudFront 致快取main.html五次,每個語言查詢字串參數值都會有一次:

  • https://d111111abcdef8.cloudfront.net/main.html?language=de

  • https://d111111abcdef8.cloudfront.net/main.html?language=en

  • https://d111111abcdef8.cloudfront.net/main.html?language=es

  • https://d111111abcdef8.cloudfront.net/main.html?language=fr

  • https://d111111abcdef8.cloudfront.net/main.html?language=jp

注意下列事項:

  • 有些 HTTP 伺服器不處理查詢字串參數,因此不會傳回根據參數值的物件不同版本。對於這些來源,如果您設定 CloudFront 為將查詢字串參數轉寄至原始位置,即使 origin CloudFront 針對每個參數值傳回物件的相同版本, CloudFront 仍會根據參數值進行快取。

  • 為使查詢字串參數能如以上範例所述搭配多種語言運作,各查詢字串參數間必須使用 & 字元做為分隔符號。如果您使用不同的分隔符號,可能會得到非預期的結果,這取決於您指定 CloudFront 要用作快取基礎的參數,以及參數在查詢字串中出現的順序而定。

    下列範例顯示如果您使用不同的分隔符號,且您設定 CloudFront 為僅根據color參數進行快取時會發生什麼情況:

    • 在下列要求中,會根據color參數的值 CloudFront 快取您的內容,但會將值 CloudFront 解譯為紅色;size =large:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red;size=large

    • 在下列要求中,會 CloudFront 快取您的內容,但不會根據查詢字串參數進行快取。這是因為您設定 CloudFront 為根據color參數進行快取,但 CloudFront 會將下列字串解譯為僅包含大的size參數;color =red:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large;color=red

您可以設定 CloudFront 為執行下列其中一項作業:

  • 完全不要轉送查詢字串到原始伺服器。如果您不轉寄查詢字串,則不CloudFront 會根據查詢字串參數進行快取。

  • 轉送查詢字串到原始伺服器,以及在查詢字串中根據所有參數快取。

  • 轉送查詢字串到原始伺服器,以及在查詢字串中根據指定的參數快取。

如需詳細資訊,請參閱 最佳化快取

查詢字串轉送和快取的主控台和 API 設定

若要在 CloudFront 主控台中設定查詢字串轉寄和快取,請參閱中的下列設定發佈設定參考

若要使用 API 設定查詢字串轉寄和快取,請參閱 Amazon CloudFront CloudFront API 參考DistributionConfigDistributionConfigWithTags中的以下設定:

  • QueryString

  • QueryStringCacheKeys

最佳化快取

當您設定 CloudFront 為根據查詢字串參數進行快取時,您可以採取下列步驟來減少 CloudFront 轉寄至來源的要求數目。當節 CloudFront 點為物件提供服務時,您可以減少原始伺服器上的負載並減少延遲,因為物件是從較靠近使用者的位置提供服務。

快取僅根據原始伺服器傳回物件不同版本的參數

對於 Web 應用程式轉寄至的每個查詢字串參數 CloudFront,會將每個參數值的要求 CloudFront轉送至您的來源,並為每個參數值快取物件的個別版本。即使原始伺服器一律傳回相同物件,無論參數值如何,情況都是如此。對於多個參數,請求的數量和物件的數量相乘。

我們建議您 CloudFront 將設定為僅根據原始碼傳回不同版本的查詢字串參數進行快取,並根據每個參數仔細考量快取的優點。例如,假設您有一個零售網站。您有六種不同顏色的夾克圖片,以及夾克有 10 種不同的大小。您已有的圖片顯示夾克的不同顏色,但不顯示不同大小。要優化緩存,您應該配置 CloudFront 為僅基於 color 參數緩存,而不是根據 size 參數。這會增加 CloudFront 可以提供快取要求的可能性,進而改善效能並減少原始伺服器的負載。

一律以相同順序列出參數

在查詢字串中參數的順序很重要。在下列範例中,查詢字串完全相同,除了參數的順序不同。這會導 CloudFront 致將兩個單獨的 image.jpg 請求轉發到您的來源,並緩存兩個單獨的對象版本:

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large&color=red

我們建議您一律以相同順序列出參數名稱,例如字母順序。

參數名稱和值請一律使用相同的大小寫

CloudFront 根據查詢字串參數進行快取時,會考量參數名稱和值的大小寫。在下列範例中,查詢字串完全相同,除了參數名稱和值的大小寫以外。這會導 CloudFront 致將四個單獨的 image.jpg 請求轉發到您的來源,並緩存四個不同版本的對象:

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=Red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=Red

我們建議您為參數名稱和值使用一致的大小寫,例如全部小寫。

不使用與簽署 URL 衝突的參數名稱

如果您使用已簽署的 URL 來限制對內容的存取 (如果您已將受信任的簽署者新增至您的發佈),請先 CloudFront 移除下列查詢字串參數,然後再將 URL 的其餘部分轉寄至您的來源:

  • Expires

  • Key-Pair-Id

  • Policy

  • Signature

如果您使用已簽署的 URL,而且想 CloudFront 要設定將查詢字串轉寄至您的 origin,則您自己的查詢字串參數無法命名為ExpiresKey-Pair-IdPolicy、、或Signature

查詢字串參數和 CloudFront 標準記錄檔 (存取記錄)

如果啟用記錄,則會 CloudFront 記錄完整 URL,包括查詢字串參數。無論您是否已設定 CloudFront 為將查詢字串轉寄至原點,都是如此。如需 CloudFront 記錄的詳細資訊,請參閱設定和使用標準日誌 (存取日誌)