AWS API Gateway 启用 CORS 跨域请求
目录
AWS REST API 要能正常跨域请求,在 API Gateway,Lambda Function 都需要额外的配置。
⚠️注意:先在类似 Postman 工具里测试 API 已经能正常执行,确认可以返回正确的结果。
先了解 CORS
有助于理解后续步骤和处理可能出现的问题。
参考文章:阮一峰:跨域资源共享 CORS 详解
为 API 开启 CORS
可参考 官方文档
API Gateway → Resources → 选择 API,
Actions → Enable CORS,
选上 4XX,选上 5XX;
点击按钮 「Enable CORS」
Lambda or HTTP proxy integrations 配置
Lambda Function 在返回结果时也要添加 header : Access-Control-Allow-Origin:'?'
Python 代码举例:
return {
'statusCode': 200,
'headers': {Access-Control-Allow-Origin:'*'},
'body': json.dumps(data)
}
-
允许所有域名的跨域请求
其中Access-Control-Allow-Origin:'*'
-
只允许指定的域名跨域,
则将*
星号替换为指定域名即可 -
要允许多个指定域名,
方法是判断请求来源的域名之后,返回对应的域名。更多详情可参考➦掘金的这篇文章。
部署 API
最后别忘了更新部署。
前端/客户端的请求
若浏览器端使用 JS fetch()
,需要注意这几个参数:
credentials: 'same-origin'
headers: {
'Authorization': 'Bearer ' + id_token //如果请求的 API 开启了 token 验证
},
method: 'GET', //根据 API 提供的访问方法而定
mode: 'cors',