我使用lambda作为AWS API Gateway的后端,使用lambda代理集成,并希望将CORS添加到响应头中 .
根据文件:
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
但是,您必须依赖后端才能返回Access-Control-Allow-Origin标头,因为代理集成已禁用集成响应 .
如何使用Python在我的lambda函数中对其进行编程 .
您需要向api网关添加方法“options”并使用代理lambda ... return
result.headers = { "Access-Control-Allow-Origin": "domain.com" }
所以当浏览器首先调用服务器的选项时,它将返回CORS头 .
问题是,默认情况下你的lambda方法将被调用为“any”方法,所以你需要更改默认的方法来获取,发布或任何你需要的方法
注意:您也可以使用相同的方法,如任何或选项,获取,发布,如果是选项调用,则只返回状态200和cors标头 . 这取决于你是否使用或不使用auth方法获取,发布等
Lambda控制台中有一个选项“启用CORS”,如果你只是使用lambda并没有什么奇怪的
要创建OPTIONS方法,您可以从Gateway启用它
导航至Gateaway,从左侧选择资源
选择 endpoints ,在顶部会有一个按钮"Action",在那里你需要选择"Enable CORS",保存设置 .
部署网关 .
它将在资源( endpoints )上创建方法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
2 回答
您需要向api网关添加方法“options”并使用代理lambda ... return
所以当浏览器首先调用服务器的选项时,它将返回CORS头 .
问题是,默认情况下你的lambda方法将被调用为“any”方法,所以你需要更改默认的方法来获取,发布或任何你需要的方法
注意:您也可以使用相同的方法,如任何或选项,获取,发布,如果是选项调用,则只返回状态200和cors标头 . 这取决于你是否使用或不使用auth方法获取,发布等
Lambda控制台中有一个选项“启用CORS”,如果你只是使用lambda并没有什么奇怪的
要创建OPTIONS方法,您可以从Gateway启用它
导航至Gateaway,从左侧选择资源
选择 endpoints ,在顶部会有一个按钮"Action",在那里你需要选择"Enable CORS",保存设置 .
部署网关 .
它将在资源( endpoints )上创建方法OPTIONS
对于GET / POST其他HTTP谓词,如果是python,则需要从代码中管理它
对于其他未处理的情况,如IntegrationTimeout(504)或代码中的错误(502),您可以在API网关级别配置默认响应标头 . 参考Default Response Headers: AWS API Gateway w/ Proxy Integration