【问题标题】:AWS serverless - Modify cloudfront POST request to a GET Request for s3 website originAWS 无服务器 - 将云端 POST 请求修改为 s3 网站来源的 GET 请求
【发布时间】:2019-06-07 11:49:02
【问题描述】:

我有一个 CloudFront 分配,其中源设置为 s3 网站端点(在 s3 上提供静态 Web 应用程序)

现在我在 s3 上的 webapp 需要一些用户信息,这些信息只能通过 iframe 的 POST 请求提供。

我认为可以在 ViewerRequest 阶段使用 Lambda@edge 函数来捕获用户信息,然后在请求源之前将请求修改为 GET 并将令牌附加到源,从而允许 s3服务。

但是我似乎无法让它工作。这甚至可能吗?

【问题讨论】:

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


    【解决方案1】:

    您无法更改 Lambda@Edge 触发器函数中的 HTTP 方法,因为它是只读的。

    方法(只读)

    查看器请求的 HTTP 方法。

    https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-event-structure-request

    可以做的是使用 AWS 开发工具包从触发函数中向 S3 发送请求,并使用检索到的对象内容到 generate a response directly from the trigger function

    请注意,您可以生成的响应大小有limits——对于查看器请求,它是 40KB。对于 Origin Request,它是 1MB。

    当然,您不一定需要从 S3 获取内容。您可以从任何地方获取它,也可以将其嵌入到函数本身中。

    使用此设置,由于函数正在生成响应,CloudFront 永远不会将实际的 POST 请求转发到 S3。

    【讨论】:

    • method (read-only) 该死!不知道我是怎么错过的:/谢谢!帮我省了很多麻烦
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2017-05-21
    • 2023-01-11
    • 2016-11-14
    • 2017-03-16
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多