API Gateway + Lambda场景下启用压缩功能无效该如何解决
API Gateway REST API 压缩功能不生效配置排查方案
1 确认压缩阈值配置有效性
- 无论通过控制台还是SAM模板配置,
MinimumCompressionSize的有效值范围为 0到10485760字节(即10MB),超出范围的配置会直接导致压缩功能失效。 - 该阈值对应的是响应载荷的未压缩原始大小,如果接口返回内容的原始大小小于你配置的阈值,API Gateway不会触发压缩。如果需要所有符合条件的响应都触发压缩,可将阈值设为0。
2 检查Lambda返回的响应配置
API Gateway REST API对接Lambda代理集成时,只有Lambda返回的响应满足以下条件才会触发压缩:
- Lambda返回的
Content-Type响应头必须属于API Gateway支持压缩的类型,默认支持的类型包括application/json、text/plain、text/css、application/javascript、text/xml、application/xml、text/javascript等,自定义Content-Type需要属于支持压缩的范畴才能生效。 - Lambda返回的响应不能提前携带
Content-Encoding头,已携带该头的响应会被API Gateway直接跳过压缩逻辑。 - Lambda返回头中除了
Vary: Accept-Encoding之外,不要手动添加其他和压缩相关的响应头,避免覆盖API Gateway的默认逻辑。
3 校验SAM模板配置层级
如果通过SAM模板部署,需要确保MinimumCompressionSize配置在正确的层级,示例正确配置如下:
Resources: MyRestApi: Type: AWS::Serverless::Api Properties: StageName: Prod MinimumCompressionSize: 0 # 根据业务需要配置阈值,0代表所有符合条件的响应都压缩 DefinitionBody: # 你的API定义内容
注意不要将该参数配置到Stage变量层级,必须配置在AWS::Serverless::Api的根Properties下才会生效。
4 重新部署API到对应Stage
不管是控制台修改压缩配置还是SAM模板更新配置,修改完成后必须重新部署API到对应的Stage,新的压缩配置才会生效,这是高频遗漏的配置步骤。
5 确认请求头符合要求
- 请求头的
Accept-Encoding必须明确包含gzip或者deflate,注意API Gateway REST API目前不支持br压缩,请求中携带的br参数会被直接忽略,只要包含gzip或deflate即可。 - 请求头不能携带
Cache-Control: no-transform,该头会强制API Gateway跳过压缩逻辑。
内容的提问来源于stack exchange,提问作者ouvreboite
相关产品推荐
相关产品推荐

