我按照here中的示例进行了操作,其中包含一个用于配置CORS + SAM的swagger文件。看起来我仍然会收到CORS错误,除非我手动将CORS标头添加到每个函数中:
callback(null, {
statusCode: '200',
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Methods': 'OPTIONS,GET,POST,PUT,PATCH,DELETE'
},
body: JSON.stringify({message: "Hello world"})
});
这是对的吗?或者我做错了什么?
答案 0 :(得分:3)
所有AWS文档建议您需要在每个API网关资源中指定这3个标头,并在每个支持CORS
的功能响应中返回它们,您可以看到他们必须将这3个标头添加到2 API网关示例项目的swagger.yaml文件中定义的端点。
您提到的Github示例正在proxy resource
中使用所谓的API Gateway
,它基本上是API Gatewaty
路由,它将匹配对api的任何请求并触发代理lambda函数请求的部分,方法......等等。您可以了解有关其工作原理的更多信息here。
您是否愿意尝试像serverless那样可以帮助您更好地组织您的lambda函数,就像SAM一样。它还support CORS。
答案 1 :(得分:0)
当我们在Allow-Origin中使用*时,我们遇到了类似的问题。
当凭证标志为真时,无法在Access-Control-Allow-Origin中使用通配符。
替换
'Access-Control-Allow-Origin': '*',
根据您的请求网址,
请求 'Access-Control-Allow-Origin': 'http://localhost:8000',
或者你的网址是什么。
您还需要在返回标头中包含端口号。它还包括http或https。
如果您想自动化,请获取您可以列入白名单的引荐网址,并传递引荐来源的协议,主机,端口部分。
希望它有所帮助。
答案 2 :(得分:0)
我知道将所有这些添加到所有方法的Swagger JSON中是一项繁琐的工作。
"headers": {
"Access-Control-Allow-Origin": {
"type": "string"
},
"Access-Control-Allow-Methods": {
"type": "string"
},
"Access-Control-Allow-Headers": {
"type": "string"
}
}
我在Java中创建了一个实用程序,它会自动将这些标头添加到您的Swagger JSON中。您可以在将其导入API网关之前运行它。