【问题标题】:AWS API Gateway: pass through file download as binaryAWS API Gateway:通过文件下载作为二进制文件
【发布时间】:2019-03-22 12:57:24
【问题描述】:

我想使用 API Gateway 传递来自本地 Express.js server 的二进制有效负载,该本地 Express.js server 发送 ZIP 文件以响应 GET 请求。

但是,API Gateway 似乎将有效负载解释为字符串,因为我在测试方法时收到以下错误:

由于配置错误,执行失败:报告长度 35508489 的集成响应大于允许的最大值 10485760 字节。

我的端点的响应头如下:

Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Connection: keep-alive
Content-Disposition: attachment; filename="rrAIkB6D_v8Htun4hpBx9.zip"
Content-Length: 34173953
Content-Type: application/zip
Date: Fri, 22 Mar 2019 08:37:38 GMT
ETag: W/"2097401-169a0b780ff"
Last-Modified: Thu, 21 Mar 2019 14:46:14 GMT

直接访问端点时下载有效。

我是否遗漏了配置中的某些内容?

【问题讨论】:

    标签: amazon-web-services aws-api-gateway


    【解决方案1】:

    首先,在一些图片上,我可以看到您的 API Gateway 的 ARN,这意味着我可以调用它,而您需要为此付费。如果我用脚本来调用它,你会付出更多。在现代云世界中,它被称为 DOW 攻击(拒绝钱包)。当心! :)

    关于这个问题,不幸的是 API Gateway 有一个 10 MB 的 hard limit 有效负载。由于它很难,它似乎并不真正适合您的用例。 :(

    【讨论】:

    • 感谢您的回答。乍一看并不明显,但它不是我真正的 ARN 或 IP 地址。关于硬限制,似乎不适用于binary pass throughs
    【解决方案2】:

    10 MB 的有效负载是硬性限制,它适用于所有有效负载,无论是二进制还是文本。 AWS documentation 中提到了这一点。

    由于 (a) 您尝试传输的文件大于 30MB,(b) 您没有在 API Gateway 配置中配置太多复杂的处理逻辑,以及 (c) 考虑到数据传输成本等,您是否能够检查您的快速服务器是否可以使用 Application Load Balancer 进行前置?此外,如果要在多个请求中重复使用响应,您可以引入缓存 (CloudFront)。

    关于您的陈述,“API Gateway 似乎将有效负载解释为字符串”,您能否确认您是否将 HTTP 请求中的值为“application/zip”的“Accept”标头传递给 API Gateway?

    【讨论】:

    • 谢谢丹尼斯,我不知道该限制也适用于二进制上传。由于浏览器的限制,我只需要一个反向代理作为本地服务器的公共 HTTPS 前端,在自定义端口上运行。没有转换,没有速率限制等。对于这个用例,您建议使用哪种(易于设置)服务?
    • 我建议你试试 ALB。您是否可以按照以下文档中的步骤查看是否可以设置 ALB 并将您的 express 服务器集成为后端? docs.aws.amazon.com/elasticloadbalancing/latest/application/…
    猜你喜欢
    • 2021-07-29
    • 2020-07-24
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2011-01-16
    • 2019-02-08
    相关资源
    最近更新 更多