确定函数的目的
在编写函数代码之前,请确定函数的用途。CloudFront Functions 中的大多数函数都具有以下用途之一。有关更多信息,请参阅与函数用途相对应的主题。
无论函数的用途是什么,handler
都是任何函数的入口点。它采用一个名为 event
的参数,该参数通过 CloudFront 传递到函数中。event
是一个 JSON 对象,它包含 HTTP 请求的表示形式(以及响应,如果您的函数修改了 HTTP 响应)。有关 event
对象结构的更多信息,请参阅 CloudFront Functions 事件结构。
有关适用于 CloudFront Functions 和 Lambda@Edge 的限制的更多信息,请参阅 边缘函数的限制。
在查看器请求事件类型中修改 HTTP 请求
您的函数可以修改 CloudFront 从查看器(客户端)收到的 HTTP 请求,然后将修改后的请求返回给 CloudFront 以继续处理。例如,您的函数代码可能会归一化缓存键或修改请求标头。
当您创建修改 HTTP 请求的函数时,请确保选择查看器请求事件类型。这意味着,在检查请求的对象是否在 CloudFront 缓存中之前,每当 CloudFront 收到来自查看器的请求时,该函数都会运行。
以下伪代码显示了修改 HTTP 请求的函数的结构。
function handler(event) { var request = event.request; // Modify the request object here. return request; }
该函数将修改后的 request
对象返回给 CloudFront。CloudFront 继续处理返回的请求,方法是检查 CloudFront 缓存是否存在缓存命中,并在必要时将请求发送到源。
有关 event
和 request
对象的结构的更多信息,请参阅 事件结构。
在查看器请求事件类型中生成 HTTP 响应
您的函数可以在边缘生成 HTTP 响应并直接将其返回给查看器(客户端),而无需检查缓存的响应或由 CloudFront 进一步处理。例如,您的函数代码可能会将请求重定向到新的 URL,或者检查授权并将 401
或 403
响应返回至未经授权的请求。
创建生成 HTTP 响应的函数时,请确保选择查看器请求事件类型。这意味着,每当 CloudFront 收到来自查看器的请求时,在 CloudFront 对请求进行任何进一步处理之前,该函数都会运行。
以下伪代码显示了生成 HTTP 响应的函数的结构。
function handler(event) { var request = event.request; var response = ...; // Create the response object here, // using the request properties if needed. return response; }
该函数将 response
对象返回给 CloudFront,CloudFront 立即将其返回给查看器,而无需检查 CloudFront 缓存或向源发送请求。
有关 event
、request
和 response
对象的结构的更多信息,请参阅 事件结构。
在查看器响应事件类型中修改 HTTP 响应
您的函数可以在 CloudFront 将 HTTP 响应发送到查看器(客户端)之前修改 HTTP 响应,无论响应来自 CloudFront 缓存还是源。例如,您的函数代码可能会添加或修改响应标头、状态代码和正文内容。
当您创建修改 HTTP 响应的函数时,请确保选择查看器响应事件类型。这意味着,该函数在 CloudFront 向查看器返回响应之前运行,无论响应来自 CloudFront 缓存还是源。
以下伪代码显示了修改 HTTP 响应的函数的结构。
function handler(event) { var request = event.request; var response = event.response; // Modify the response object here, // using the request properties if needed. return response; }
该函数将修改后的 response
对象返回给 CloudFront,CloudFront 会立即将其返回给查看器。
有关 event
和 response
对象的结构的更多信息,请参阅 事件结构。
有关为 CloudFront Functions 编写函数代码的更多信息,请参阅 事件结构、JavaScript 运行时系统功能 和 代码示例。