Lambda @ edge读取正文POST请求

时间:2018-01-27 09:52:59

标签: amazon-web-services aws-lambda amazon-cloudfront

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

我的想法是在'Viewer Request'上注册lambda并拦截POST方法,读取正文并复制标题上的值,以便从我的静态网站上读取它们(我知道我可以访问Referrer标题用javascript)。

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

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

关于我的任何建议都可以吗?我是否需要在Cloudfront端配置任何参数?

2 个答案:

答案 0 :(得分:3)

Lambda @ Edge函数无法使用查看器请求和原始响应的主体 - 只有标题。

虽然在您访问正文中的数据后,您还没有完全清楚您要执行的操作,但如果您需要这些内容,那么这是AWS的解决方法:< / p>

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

答案 1 :(得分:2)

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

要通过请求访问它:

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

要在cloudfront中对其进行配置:

enter image description here

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