我在AWS Cloudfront上托管了一个静态网站。 在路由上我需要接受POST方法,因为是OAuth服务器的重定向所以我决定开发一个Lambda @ edge。
我的想法是在'Viewer Request'上注册lambda并拦截POST方法,读取正文并复制标题上的值,以便从我的静态网站上读取它们(我知道我可以访问Referrer标题用javascript)。
我设置了Lambda,我可以拦截POST,让所有其他方法都通过。
问题是我找不到一种方法来读取POST请求的正文,我用google搜索它没有结果。
关于我的任何建议都可以吗?我是否需要在Cloudfront端配置任何参数?
答案 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中对其进行配置: