

# 选择要触发函数的事件
<a name="lambda-how-to-choose-event"></a>

当您决定使用哪个 CloudFront 事件来触发 Lambda 函数时，请考虑以下因素：

**我希望 CloudFront 缓存由 Lambda 函数更改的对象**  
要缓存由 Lambda 函数修改的对象，以便下次请求该对象时 CloudFront 可以从边缘站点提供该对象，请使用*源请求*或*源响应*事件。  
这样可减少源上的负载、减少后续请求的延迟，并降低对后续请求调用 Lambda@Edge 的成本。  
例如，如果要添加、删除或更改由源返回的对象的标头，并且希望 CloudFront 缓存结果，请使用源响应事件。

**我希望该函数针对每个请求执行**  
要针对 CloudFront 为分配接收的每个请求执行该函数，请使用*查看器请求*或*查看器响应*事件。  
只有在未将请求的对象缓存在边缘站点中且 CloudFront 将请求转发到源时，才会发生源请求和源响应事件。

**我希望函数更改缓存键**  
要更改您要用作缓存基础的值，请使用*查看器请求*事件。  
例如，如果某个函数将 URL 更改为在路径中包含语言缩写 (例如，由于用户从下拉列表中选择了其语言)，请使用查看器请求事件：  
+ **查看器请求中的 URL** – 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 会缓存对更改的源请求的响应。