如何使用Lambda代理集成激活功能将CORS标头添加到AWS API Gateway响应

Hel*_*lad 4 amazon-web-services aws-lambda aws-api-gateway

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

根据文档:

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
Run Code Online (Sandbox Code Playgroud)

但是,您必须依靠后端返回Access-Control-Allow-Origin标头,因为对于代理集成禁用了集成响应。

如何使用Python在lambda函数中进行编程。

小智 5

您需要向您的 api 网关添加一个方法“选项”并使用代理 lambda...返回

result.headers = { "Access-Control-Allow-Origin": "domain.com" }
Run Code Online (Sandbox Code Playgroud)

因此,当浏览器首次向服务器调用选项时,它将返回 CORS 标头。

问题是,默认情况下,您的 lambda 方法将被“任何”方法调用,因此您需要将默认方法更改为 get、post 或任何您需要的方法

注意:您也可以使用相同的方法,例如 any 或 options、get、post,如果是选项调用,则仅返回状态 200 和 cors 标头。这取决于您是否使用 get、post 等身份验证方法

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


小智 5

要创建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" : "*"
    }
}
Run Code Online (Sandbox Code Playgroud)

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