

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

# 選擇要觸發函數的事件
<a name="lambda-how-to-choose-event"></a>

當您決定要使用哪個 CloudFront 事件來觸發 Lambda 函數，請考慮以下資訊：

**我希望 CloudFront 快取由 Lambda 函數更改的物件**  
如果要快取由 Lambda 函數修改的物件，以便讓 CloudFront 在下次收到請求時能夠從邊緣節點提供物件，請使用*原始伺服器請求*或*原始伺服器回應*事件。  
這樣可以降低原始伺服器的負載，減少後續請求的延遲，並降低叫用 Lambda@Edge 在後續請求的費用。  
例如，如果您想要新增、移除或變更傳回原始伺服器的物件標頭，且您希望 CloudFront 快取結果，請使用原始伺服器的回應事件。

**我希望函數執行每個請求**  
如果要讓函數執行每個 CloudFront 收到用於分佈的請求，請使用*檢視器請求*或*檢視器回應*事件。  
原始伺服器請求與原始伺服器回應事件，僅會在當請求的物件未快取於節點以及 CloudFront 轉送請求至原始伺服器時發生。

**我希望函數變更快取金鑰**  
如欲變更快取基礎值，請使用*檢視器請求*事件。  
例如，若函數變更其 URL 以包含語言縮寫在路徑中 (例如，因為使用者從下拉式清單中選擇其語言)，請使用檢視器請求事件：  
+ **檢視器請求中的 URL** – https：//https://example.com/en/index.html
+ **當請求來自德國境內 IP 位址時的 URL** – https://example.com/de/index.html
如果您快取根據 Cookie 或請求標頭，也可以使用檢視器請求事件。  
如果函數變更 Cookie 或標頭，可設定 CloudFront 轉送請求適用的部分到原始伺服器。如需詳細資訊，請參閱下列主題：  
+ [根據 Cookie 快取內容](Cookies.md)
+ [根據請求標頭快取內容](header-caching.md)

**函數會影響原始伺服器回應**  
如果您希望依影響原始伺服器回應的方法變更請求，請使用*原始伺服器請求*事件。  
一般而言，大多數檢視器請求事件不會轉送至原始伺服器。CloudFront 會使用已在邊緣快取中的物件回應請求。如果函數依原始伺服器請求事件變更請求，CloudFront 會快取對變更的原始伺服器請求的回應。