【问题标题】:Lambda@edge read body POST requestLambda@edge 读取正文 POST 请求
【发布时间】:2018-07-06 13:44:49
【问题描述】:

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

我的想法是在“查看器请求”上注册 lambda 并拦截 POST 方法,读取正文并复制标头上的值,以便从我的静态网站上读取它们(我知道我可以访问推荐人带有 javascript 的标头)。

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

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

关于我能做到的任何建议?在 Cloudfront 端我需要配置什么参数吗?

【问题讨论】:

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


    【解决方案1】:

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

    从请求中访问它:

    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

    【讨论】:

      【解决方案2】:

      查看器请求和原始响应的正文不适用于 Lambda@Edge 函数——只有标头。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-04
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2018-10-30
        • 2015-12-14
        • 2014-11-29
        • 2020-05-16
        相关资源
        最近更新 更多