You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API Gateway Lambda代理集成传递自定义X-Content-Type-Options头

问题:Lambda Proxy Integration下自定义响应头未返回

场景说明

我使用AWS Lambda作为REST API Gateway的后端,采用Lambda Proxy Integration模式,通过AWS CDK部署。Lambda函数返回的响应中包含X-Content-Type-Options: nosniff头,但测试时客户端无法接收到这个头——状态码和响应体都是正常的,我已经确认Lambda返回的响应字典里确实有这个头,也检查过API Gateway的头过滤、映射设置,问题仍未解决。

Lambda处理器代码

def lambda_handler(event, context):
    # ... 业务逻辑 ...
    return {
        "statusCode": 200,
        "body": json.dumps({"message": "Success"}),
        "headers": {
            "X-Content-Type-Options": "nosniff"
        },
        "isBase64Encoded": False
    }

AWS CDK创建API Gateway的代码

api = aws_apigateway.LambdaRestApi(
    self,
    "MyApi",
    handler=my_lambda_function,
    # ... 其他配置 ...
)

排查与解决方法

1. 检查CORS配置是否暴露自定义头

如果API Gateway启用了CORS,默认不会暴露自定义响应头给客户端。需要在CDK的default_cors_preflight_options中明确添加要暴露的头:

api = aws_apigateway.LambdaRestApi(
    self,
    "MyApi",
    handler=my_lambda_function,
    default_cors_preflight_options={
        "allow_origins": aws_apigateway.Cors.ALL_ORIGINS,
        "allow_headers": aws_apigateway.Cors.ALL_HEADERS,
        "expose_headers": ["X-Content-Type-Options"]  # 必须添加此行,让客户端能获取到该头
    }
)

2. 确认API Gateway阶段的头过滤设置

检查API Gateway对应阶段的“Response Headers”配置,确保没有将X-Content-Type-Options加入移除列表。如果是CDK部署,默认不会过滤该头,但如果手动修改过阶段配置,需要恢复默认或添加允许规则。

3. 验证Lambda返回的头格式

虽然API Gateway支持大小写的头键,但可以尝试将头键改为小写x-content-type-options测试,避免部分客户端或代理的大小写敏感问题:

"headers": {
    "x-content-type-options": "nosniff"
}

4. 刷新或关闭API Gateway缓存

如果API Gateway开启了缓存,旧的缓存响应可能不包含新添加的头。可以手动刷新缓存,或者暂时关闭缓存测试是否恢复正常。

5. 查看日志定位问题

  • 检查Lambda的CloudWatch日志,确认返回的响应字典确实包含目标头;
  • 开启API Gateway的执行日志,查看API Gateway是否接收到该头,以及在转发给客户端时是否被过滤。

内容的提问来源于stack exchange,提问作者thecodingaviator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:12