Lambda@edge 读取 body POST 请求

Lambda@edge read body POST request

我在 AWS Cloudfront 上托管了一个静态网站。 在一条路线上,我需要接受 POST 方法,因为它是 OAuth 服务器的重定向,所以我决定开发一个 Lambda@edge.

我的想法是在 'Viewer Request' 上注册 lambda 并拦截 POST 方法,读取 body 并按顺序复制 header 上的值使它们可从我的静态网站读取(我知道我可以使用 javascript 访问推荐人 header)。

我设置了 Lambda,我可以拦截 POST 让所有其他方法通过。

问题是我找不到读取 POST 请求的 body 的方法,我用谷歌搜索没有结果。

关于我能做到的任何建议吗?我必须在 Cloudfront 端配置任何参数吗?

body 查看器请求和原始响应不适用于 Lambda@Edge 函数 -- 只有 headers。

虽然还不完全清楚您在访问 body 中的数据后要做什么,但如果这是您需要的,那么这里是 AWS 解决方法:

查看 API 网关,它确实可以访问请求 body。您可以部署一个 API 网关区域端点并将该端点作为第二个源添加到您的 CloudFront 分配中。然后,您可以在源请求触发器中使用 Lambda@Edge 将这些请求转移到备用源(您的新 "API," 可以根据您收到的 POST 请求生成您想要的响应)。

接受的答案是正确的,但 AWS 引入了允许访问 Request Body 的功能。

从请求访问它:

const body = Buffer.from(request.body.data, 'base64').toString();

在云端配置:

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html#lambda-examples-access-request-body-examples