AWS 无服务器 - 将 cloudfront POST 请求修改为对 s3 网站来源的 GET 请求
AWS serverless - Modify cloudfront POST request to a GET Request for s3 website origin
我有一个 CloudFront 分配,其中源设置为 s3 网站端点(在 s3 上提供静态 Web 应用程序)
现在我在 s3 上的 webapp 需要一些用户信息,这些信息只能通过来自 iframe 的 POST 请求提供。
我认为可以在 ViewerRequest 阶段使用 Lambda@edge 函数来捕获用户信息,然后将请求修改为 GET 并在请求源之前将令牌附加到源,从而允许s3 发球。
但是我似乎无法让它工作。这甚至可能吗?
您不能在 Lambda@Edge 触发器函数中更改 HTTP 方法,因为它是只读的。
method (read-only)
The HTTP method of the viewer request.
您可以做的是使用 AWS SDK 从触发函数中向 S3 发送请求,并使用检索到的对象内容 generate a response directly from the trigger function。
请注意,您可以生成 limits 的响应大小 -- 对于查看器请求,它是 40KB。对于原始请求,它是 1MB。
当然,您不一定需要从S3 中获取内容。您可以从任何地方获取它,也可以将它嵌入函数本身。
使用此设置,由于函数正在生成响应,CloudFront 永远不会将实际的 POST
请求转发到 S3。
我有一个 CloudFront 分配,其中源设置为 s3 网站端点(在 s3 上提供静态 Web 应用程序)
现在我在 s3 上的 webapp 需要一些用户信息,这些信息只能通过来自 iframe 的 POST 请求提供。
我认为可以在 ViewerRequest 阶段使用 Lambda@edge 函数来捕获用户信息,然后将请求修改为 GET 并在请求源之前将令牌附加到源,从而允许s3 发球。
但是我似乎无法让它工作。这甚至可能吗?
您不能在 Lambda@Edge 触发器函数中更改 HTTP 方法,因为它是只读的。
method (read-only)
The HTTP method of the viewer request.
您可以做的是使用 AWS SDK 从触发函数中向 S3 发送请求,并使用检索到的对象内容 generate a response directly from the trigger function。
请注意,您可以生成 limits 的响应大小 -- 对于查看器请求,它是 40KB。对于原始请求,它是 1MB。
当然,您不一定需要从S3 中获取内容。您可以从任何地方获取它,也可以将它嵌入函数本身。
使用此设置,由于函数正在生成响应,CloudFront 永远不会将实际的 POST
请求转发到 S3。