gin*_*i09 8 api proxy lambda gateway amazon-web-services
我正在使用AWS API Gateway(APIG)和Lambda函数构建无服务器的Web站点.我必须使用代理集成,因为后面的Lambda函数必须接收http请求标头.同时,需要提供一些二进制数据.就我而言,favicon.ico文件.其他人可能想要提供动态创建的PDF或Excel文件.APIG为此目的提供二元支持.使用base64对数据进行编码并配置该MIME内容类型,以便在将其提供给客户端之前对其进行解码.但是,这不适用于代理集成.代理集成只是跳过集成响应部分.
我尝试将favicon.ico的请求重定向到S3端点,但浏览器显示奇怪的行为.因为ico文件来自不同的重定向域,而不是同一个域.
使用base64对其进行编码并让客户端浏览器对其进行解码不是一种选择,因为这不是标准的,并且可能无法在所有浏览器中使用.
我认为在AWS为此添加新功能之前我无法做任何其他事情.有没有人调查过这个问题?有什么想法或建议吗?
在这里回答我自己的问题。您应该访问 AWS 论坛以获取 AWS 问题。这里不是很多 AWS 用户。
答案:代理集成的二进制支持确实有效,它适用于传入和传出响应。
有3个因素与此相关:
上面的答案意味着是的,您可以接受文件,再次是的,您可以通过代理集成吐出文件。
当用户“发布”带有正文并且您设置的 MIME 类型与其匹配时,APIG 会以 base64 对整个正文部分进行编码,并用“isBase64Encoded”值表示这一点。同样的事情也会发生在传出的响应上。如果您想使用二进制数据进行响应,请使用 base64 对其进行编码,并在传出的 JSON 中将该值设置为 true。
对于传入请求,它仅取决于一个因素,即您设置的 MIME 类型。对于传出,JSON 中的指示符和 MIME 类型这两个条件必须匹配。
为简单起见,我只是将 MIME 类型设置为*/*
. 每当用户提交正文中的任何内容时,让 APIG 编码然后我解码。每当我用二进制响应时,我只需设置指标并以 base64 编码。我不会对其他类型(例如 test/html(未压缩))执行此操作。