AWS API Gateway:以二进制形式通过文件下载

时间:2019-03-22 12:57:24

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

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

但是,API网关似乎将有效载荷解释为字符串,因为在测试该方法时会收到以下错误消息:

  

由于配置错误,执行失败:报告长度为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

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

我是否错过了配置中的某些内容?

AWS API Gateway: Overview AWS API Gateway: Method Request AWS API Gateway: Integration Request AWS API Gateway: Method Response AWS API Gateway: Integration Response AWS API Gateway: Method Test AWS API Gateway: Settings

2 个答案:

答案 0 :(得分:2)

首先,在某些图片上,我可以看到您的API网关的ARN,这意味着我可以调用它,而您要为此付费。而且,如果我经常使用脚本来称呼它,那么您将付出更多。在现代云世界中,这称为DOW攻击(拒绝钱包)。小心! :)

不幸的是,关于这个问题,API网关有hard limit个10 MB的有效负载。既然很难,那似乎就不适合您的用例了。 :(

答案 1 :(得分:1)

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

由于(a)您要传输的文件大于30MB,(b)您尚未在API Gateway配置中配置太多复杂的处理逻辑,并且(c)考虑了数据传输成本等,您将能够检查您的Express服务器是否可以使用Application Load Balancer进行管理?此外,如果要在多个请求之间重用响应,则可以引入缓存(CloudFront)。

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