Lambda @ edge读取正文POST请求

Ant*_*ano 1 amazon-web-services amazon-cloudfront aws-lambda

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

我的想法是在“查看器请求”上注册lambda并拦截POST方法,读取正文并复制标头上的值,以使其可从我的静态网站读取(我知道我可以使用javascript访问Referrer标头)。

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

问题是我找不到读取POST请求正文的方法,我用google搜索它没有结果。

有什么建议我可以做到吗?我必须在Cloudfront端配置任何参数吗?

Mic*_*bot 5

查看器请求和源响应的正文不可用于 Lambda@Edge 函数,仅可使用标头。

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

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


小智 5

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

要从请求访问它:

const body = Buffer.from(request.body.data, 'base64').toString();
Run Code Online (Sandbox Code Playgroud)

要在Cloudfront中进行配置:

在此处输入图片说明

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