本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
根據查詢字串參數快取內容
有些 Web 應用程式使用查詢字串來傳送資訊到原始伺服器。查詢字串是 Web 請求的一部分,其顯示在 ?
字元之後;此字串可包含以 &
字元分隔的一或多個參數。在下面的例子中,查詢字符串包括兩個參數,color=red
以及 size=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 解譯為red;size=large
:https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red;size=large
-
在下列要求中,會 CloudFront 快取您的內容,但不會根據查詢字串參數進行快取。這是因為您設定CloudFront 為根據
color
參數進行快取,但會將下列字串 CloudFront解譯為僅包含具有下列值的size
參數large;color=red
:https://d111111abcdef8.cloudfront.net/images/image.jpg?
size=large;color=red
-
您可以設定 CloudFront 為執行下列其中一項作業:
-
完全不要轉送查詢字串到原始伺服器。如果您不轉寄查詢字串,則不 CloudFront 會根據查詢字串參數進行快取。
-
轉送查詢字串到原始伺服器,以及在查詢字串中根據所有參數快取。
-
轉送查詢字串到原始伺服器,以及在查詢字串中根據指定的參數快取。
如需詳細資訊,請參閱優化緩存。
查詢字串轉送和快取的主控台和API設定
若要在 CloudFront 主控台中設定查詢字串轉寄和快取,請參閱中的下列設定分佈設定參考:
若要使用設定查詢字串轉寄和快取 CloudFront API,請參閱 Amazon CloudFront API 參考OriginRequestPolicy中的CachePolicy和。
優化緩存
當您設定 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
我們建議您為參數名稱和值使用一致的大小寫,例如全部小寫。
-
- 不要使用與簽名衝突的參數名稱 URLs
-
如果您使用 signed URLs 來限制對內容的存取 (如果您在發行版中新增了受信任的簽署者),請先 CloudFront 移除下列查詢字串參數,然後再將其餘部分轉寄URL到您的來源:
-
Expires
-
Key-Pair-Id
-
Policy
-
Signature
如果您使用 signed URLs 且想要設定將查詢字串轉寄 CloudFront 至您的 origin,則您自己的查詢字串參數無法命名為
Expires
Key-Pair-Id
Policy
、、或Signature
。 -
查詢字串參數和CloudFront 標準記錄檔 (存取記錄)
如果啟用記錄,請記 CloudFront 錄完整記錄URL,包括查詢字串參數。無論您是否已設定 CloudFront 為將查詢字串轉寄至原點,都是如此。如需有關 CloudFront 記錄的詳細資訊,請參閱配置和使用標準日誌(訪問日誌)。