Amazon web services Lambda@edge读取正文后请求

Amazon web services Lambda@edge读取正文后请求,amazon-web-services,aws-lambda,amazon-cloudfront,Amazon Web Services,Aws Lambda,Amazon Cloudfront,我在AWS Cloudfront上有一个静态网站。 在路由上,我需要接受POST方法,因为它是OAuth服务器的重定向,所以我决定开发一个Lambda@edge. 我的想法是在“查看器请求”上注册lambda并拦截POST方法,读取主体并复制标题上的值,以便从我的静态网站上读取它们(我知道我可以使用javascript访问referer标题) 我设置了Lambda,我可以拦截帖子,让所有其他方法通过 问题是我找不到一种阅读POST请求正文的方法,我在谷歌上搜索了一下,没有结果 对我能做这件事有什

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

我的想法是在“查看器请求”上注册lambda并拦截POST方法,读取主体并复制标题上的值,以便从我的静态网站上读取它们(我知道我可以使用javascript访问referer标题)

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

问题是我找不到一种阅读POST请求正文的方法,我在谷歌上搜索了一下,没有结果


对我能做这件事有什么建议吗?Cloudfront端是否有任何必须配置的参数?

查看器请求和原始响应的主体不可用于Lambda@Edge函数——只包含标题

虽然还不完全清楚一旦您访问了身体中的数据,您将尝试做什么,但如果您需要这样做,那么AWS的解决方案如下:


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

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

要从请求访问它,请执行以下操作:

const body = Buffer.from(request.body.data, 'base64').toString();
要在cloudfront中配置它,请执行以下操作: