我正在使用AWS API Gateway(APIG)和Lambda函数构建无服务器网站。我必须使用代理集成,因为后面的Lambda函数必须接收http请求标头。同时,需要提供一些二进制数据。就我而言,favicon.ico文件。其他人可能想要提供动态创建的PDF或Excel文件。 APIG为此目的提供二元支持。使用base64对数据进行编码并配置该MIME内容类型,以便在将其提供给客户端之前对其进行解码。但是,这不适用于代理集成。代理集成只是跳过集成响应部分。
我尝试将favicon.ico的请求重定向到S3端点,但浏览器显示出奇怪的行为。因为ico文件来自不同的重定向域,而不是同一个域。
使用base64编码并让客户端浏览器解码它不是一个选项,因为这不是标准,可能无法在所有浏览器中使用。
我认为除非AWS为此添加新功能,否则我无法执行任何其他操作。有没有人调查过这个问题?有什么想法或建议吗?
答案 0 :(得分:2)
在这里回答我自己的问题。您应该访问AWS论坛以获取AWS问题。不是mamy AWS用户。
答案:使用代理集成的二进制支持DOES WORK,它适用于传入和传出响应。
有3个与此相关的因素:
上面的答案意味着是的,你可以接受文件,是的,你可以通过代理集成来吐出文件。
当用户发布消息时使用body,如果你设置的MIME类型与它匹配,APIG会在base64中对整个身体部分进行编码,并使用" isBase64Encoded"值。外向响应也会发生同样的事情。如果要使用二进制数据进行响应,可以在base64中对其进行编码,并在传出JSON中将该值设置为true。
对于传入请求,它仅取决于一个因素,即您设置的MIME类型。对于传出,两个条件,JSON和MIME类型中的指示符必须匹配。
为简单起见,我只是将MIME类型设置为*/*
。每当用户提交身体中的任何内容时,让APIG编码然后我解码。每当我用二进制响应时,我只需设置指标并在base64中编码。我不会对其他类型执行此操作,例如test / html(未压缩)。
答案 1 :(得分:0)
我遇到了类似的情况,Node lambda函数从服务层返回二进制blob(PDF)。
参考:here