本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
有些 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 轉送查詢字串參數至原始伺服器,即使原始伺服器為每個參數值傳回相同物件的版本給 CloudFront,CloudFront 仍會根據參數值執行快取。
-
為使查詢字串參數能如以上範例所述搭配多種語言運作,各查詢字串參數間必須使用
&
字元做為分隔符號。如果您使用不同的分隔符號,即有可能得到非預期的結果,具體取決於您所指定供 CloudFront 做為快取基礎的參數以及這些參數在查詢字串中顯示的順序。以下範例顯示使用不同的分隔符號並將 CloudFront 設定為僅根據
color
參數進行快取時將會發生的情況:-
在下列請求中,CloudFront 根據
color
參數值快取內容,但 CloudFront 將該值解譯為red;size=large
:https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red;size=large
-
在下列請求中,CloudFront 快取內容但不根據查詢字串參數快取。這是因為根據
color
參數設定 CloudFront 來快取,但 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 參考中的 CachePolicy 和 OriginRequestPolicy。
最佳化快取
根據查詢字串參數將 CloudFront 設為快取時,可以採取下列步驟來減少 CloudFront 轉送至原始伺服器的請求數。CloudFront 節點存取物件時,您可以減少原始伺服器的負載並降低延遲,因為物件由離您使用者較近的位置提供。
- 快取僅根據原始伺服器傳回物件不同版本的參數
-
針對每個 Web 應用程式轉送到 CloudFront 的查詢字串參數,CloudFront 為每個參數值轉送請求到原始伺服器,且為每個參數值快取個別的物件版本 即使原始伺服器一律傳回相同物件,無論參數值如何,情況都是如此。對於多個參數,請求的數量和物件的數量相乘。
我們建議您設定 CloudFront 快取僅根據原始伺服器傳回物件不同版本的查詢字串參數,並且根據每個參數仔細考慮快取的優點。例如,假設您有一個零售網站。您有六種不同顏色的夾克圖片,以及夾克有 10 種不同的大小。您已有的圖片顯示夾克的不同顏色,但不顯示不同大小。為了最佳化快取,應設定 CloudFront 僅根據顏色參數,而非根據大小參數來快取。這會增加 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 來限制存取內容 (如果您新增可信任簽署者到分佈),在轉送 URL 的其他部分到原始伺服器之前,則 CloudFront 移除以下查詢字串參數:
-
Expires
-
Key-Pair-Id
-
Policy
-
Signature
如果您使用簽署 URL,且想要設定 CloudFront 將查詢字串轉送到原始伺服器,則無法命名自己的查詢字串參數為
Expires
、Key-Pair-Id
、Policy
或Signature
。 -
查詢字串參數和 CloudFront 標準記錄檔 (存取日誌)
如果您啟用記錄,則 CloudFront 會記錄完整的 URL,包括查詢字串參數。無論您是否已設定 CloudFront 將查詢字串轉送給原始伺服器,這都是如此。如需 CloudFront Front 記錄的詳細資訊,請參閱 標準記錄 (存取日誌)。