如何使用lambda代理集成激活将CORS标头添加到AWS API网关响应

时间:2017-05-03 10:06:43

标签: amazon-web-services aws-lambda aws-api-gateway

我使用lambda作为AWS API Gateway的后端,使用lambda代理集成,并希望将CORS添加到响应头中。

根据文件:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

但是,您必须依赖后端才能返回Access-Control-Allow-Origin标头,因为代理集成已禁用集成响应。

如何使用Python在我的lambda函数中对其进行编程。

2 个答案:

答案 0 :(得分:4)

您需要向api网关添加方法“options”并使用代理lambda ... return

result.headers = { "Access-Control-Allow-Origin": "domain.com" }

因此,当浏览器首先调用服务器的选项时,它将返回CORS标题。

问题是,默认情况下,你的lambda方法将被调用为“any”方法,所以你需要更改默认的方法来获取,发布或任何你需要的方法

注意:您也可以使用相同的方法,如任何或选项,获取,发布,如果是选项调用,则只返回状态200和cors标头。这取决于你是否使用或不使用auth方法获取,发布等

在Lambda控制台中有一个选项“启用CORS”,如果你只是使用没有奇怪的lambda

答案 1 :(得分:3)

要创建OPTIONS方法,您可以从网关启用它

  1. 导航至Gateaway,从左侧选择资源
  2. 选择端点,在顶部有一个“操作”按钮,您需要在其中选择“启用CORS”,保存设置。
  3. 部署网关。

它将在资源(端点)上创建方法OPTIONS

对于GET / POST其他HTTP动词,如果是python,则需要通过代码进行管理

return {
    'statusCode': "200",
    'body': json.dumps({"test" : "123"}),
    'headers': {
        "Content-Type" : "application/json",
        "Access-Control-Allow-Origin" : "*",
        "Allow" : "GET, OPTIONS, POST",
        "Access-Control-Allow-Methods" : "GET, OPTIONS, POST",
        "Access-Control-Allow-Headers" : "*"
    }
}

对于其他未处理的情况,例如IntegrationTimeout(504)或代码中的错误(502),您可以在API网关级别配置默认响应标头。请参阅Default Response Headers: AWS API Gateway w/ Proxy Integration