API Gateway反向代理S3暴露二进制文件时浏览器访问异常如何解决
问题根因
你遇到的文件损坏是API Gateway默认做了base64编码转换导致的:
- 返回的62020字节是46513字节原始内容经过base64编码后的标准长度
x-amzn-Repmapped-Content-Length头返回的是S3侧的原始文件大小,证明网关在转发流程中修改了响应数据流- 之前配置的
*/*二进制媒体类型仅在请求Accept头完全匹配时生效,浏览器默认发送的Accept头是带权重的多值格式(如text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8),无法触发匹配规则,因此配置不生效
REST API全透传配置方案
按照以下步骤操作即可实现S3响应原封不动透传给客户端:
- 进入REST API的全局「设置」页,找到二进制媒体类型模块,将「内容处理」策略修改为透传(不转换),不要使用默认的基于请求头转换策略
- 进入对应资源的「集成请求」配置页:
- 找到集成的内容处理选项,设置为不转换
- 在HTTP请求头映射配置中,添加静态
Accept头,值设为'*/*',强制网关向后端S3发送固定的二进制接受头,不受客户端请求头影响
- 进入「集成响应」配置页,删除所有
Content-Type、Content-Length等响应头的映射规则,直接透传S3返回的原生响应头即可 - 所有配置修改完成后,重新部署API到对应的生效阶段,清空浏览器缓存后再做测试
内容的提问来源于stack exchange,提问作者Darren Oakey
相关产品推荐
相关产品推荐

