My API Gateway/Lambda setup返回一个HTTP响应标头:Lambda 使用回调函数将值作为 JSON 的一部分返回集成响应将其映射到 HTTP 标头(使用 integration.response.body
(
使用此解决方案,值将在正文和标头中发回。
如何在不复制响应正文中的值的情况下映射来自 Lambda 响应的标头?
如果您启用了 Lambda 代理集成,则可以将响应标头设置为 Lambda 输出的一部分,API 网关会将它们作为 HTTP 响应的一部分返回给客户端。
节点.js示例:
callback(null, {
"isBase64Encoded": false, // Set to `true` for binary support.
"statusCode": 200,
"headers": {
"header1Name": "header1Value",
"header2Name": "header2Value",
},
"body": "...",
});
其中,如果不返回额外的响应标头,则headers
可以为 null 或未指定。
请参阅用于代理集成的 Lambda 函数的输出格式。
未启用 Lamba 代理集成,则可以在 Amazon API 网关控制台中添加(并映射(响应标头:
转到资源 -> 方法执行 -> 方法响应 ->为 HTTP 状态 200 添加"访问控制-允许-源"(或其他(标头。然后返回到方法执行 -> 集成响应 -> http status 200 -> 将"Access-Control-Allow-Origin"的标头映射设置为"*"(或其他任何内容(。
解决了此错误...:"请求的资源上不存在'访问控制-允许源'标头">
由于问题指出正在使用自定义映射(使用 integration.response.body(,这意味着未使用 Lambda 代理集成。因此,在这种情况下,解决方案是按照您已经做的方式映射标头。
要从正文部分删除标头重复项,请在集成响应中使用映射模板并忽略映射中的标头。我认为您可能正在使用传递响应,这就是您看到重复标头的原因。
在此处查看更多文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html