我有一个与启用CORS的API网关集成的Lambda函数。我正在使用LAMBDA\u代理集成,因此我知道必须指定
Access-Control-Allow-Origin
Lambda函数中我的响应中的标头。然而,我只想允许来自特定域(www.example.com)的跨资源共享。
Lambda函数-
'use strict'
module.exports.handler = (event, context, callback) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "https://www.example.com"
},
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
};
当我执行一个测试GET请求(从API网关控制台)时,它会返回一个成功的(200)响应。我可以预期,因为我是从AWS Api网关控制台调用端点,而不是从
https://www.example.com
端点应返回非200状态代码。
我可以看到
访问控制允许原点
我的回复中的标题-
如果我的源域名不是
https://www.example.com
??
此外,我还尝试从S3中静态托管的网站调用Ajax。尽管我显然不是在www.example上打电话,但我仍然收到了200条响应和JSON数据。com。
编辑:
最后,我重新创建了这些资源,只是为了给这个问题添加一个实例。
当我直接单击API端点时,它允许我获取JSON数据(我使用的是Google Chrome 64.0.3282.186和FireFox 58.0.2)。
https://w69y8dk663.execute-api.us-east-1.amazonaws.com/dev/api/status
然而,当我从静态托管的s3网站发出Ajax请求时,我得到了错误。
http://test-cors-ajax.s3-website-us-east-1.amazonaws.com/
昨天我测试了ajax,它让我找回了JSON数据,一定是缓存了什么东西(运行的旧代码没有allow-access-origin头)。不管怎样,它看起来就像预期的那样工作。
我确实觉得很有趣,我的浏览器让我直接命中端点,而不抛出CORS错误。感谢您的意见。