配置 aws lambda 和 api 网关以返回 image/avif 内容类型的二进制数据

Posted

技术标签:

【中文标题】配置 aws lambda 和 api 网关以返回 image/avif 内容类型的二进制数据【英文标题】:configure aws lambda and api gateway to return binary data for image/avif content-type 【发布时间】:2021-11-20 12:07:52 【问题描述】:

关于使用 aws lambda 和 api 网关的二进制数据的问题和博客文章不乏其人,但令人惊讶的是,我一直无法找到与 AVIF 图像相关的任何内容。这很重要,因为铬中有this issue。本质上,chrome 团队最近将"image/avif" 添加到其图像的Accept 标头的开头,这导致我的端点返回图像的base64 字符串而不是二进制数据。如果我使用 curl 重复相同的请求并从 Accept 标头中删除 "image/avif",我会得到二进制数据。具体来说:

accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 产生二进制数据 accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 产生 base64 数据(并且图像在网页中损坏) accept: image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 产生二进制数据

从 chromium 线程中的讨论看来,解决方案似乎是更新我的端点以在 Accept 标头以 "image/avif" 开头时使用适当的二进制数据进行响应。然而,事实证明这对我来说很困难。我最接近的是this answer。我已经按照这些步骤更新了我的 API 网关配置,但是当 Accept 标头以 "image/avif" 开头时,我仍然获得 base64 数据。而且我还没有找到任何专门提到这个问题的帖子。

【问题讨论】:

【参考方案1】:

事实证明,我在帖子中链接的指南包含所有必要步骤,但 API Gateway 仪表板中的“保存更改”按钮实际上并未部署您的更改。您必须转到 Resources > Actions > Deploy API 才能使更改生效。

【讨论】:

以上是关于配置 aws lambda 和 api 网关以返回 image/avif 内容类型的二进制数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在API网关中为反向代理配置AWS EC2实例

如何使用SAM通过API网关配置异步lambda调用?

来玩 Serverless: 如何把 Express 应用迁移到 Amazon API 网关和 AWS Lambda 上

使用代理通过 AWS API Gateway 的 Lambda 错误

如何使用 AWS API 网关和 Lambda 通过 CORS?

AWS Lambda、API 网关和 Cognito:如何在 lambda 函数中获取身份对象?