配置 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 内容类型的二进制数据的主要内容,如果未能解决你的问题,请参考以下文章
来玩 Serverless: 如何把 Express 应用迁移到 Amazon API 网关和 AWS Lambda 上
使用代理通过 AWS API Gateway 的 Lambda 错误