首页 文章

AWS API Gateway - 具有特定域的CORS

提问于
浏览
0

我有一个与API网关集成的Lambda函数,启用了CORS . 我正在使用LAMBDA_PROXY集成,所以我知道我必须在Lambda函数的响应中指定 Access-Control-Allow-Origin 标头 . 但是,我只想允许来自特定域(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网关控制台调用 endpoints 而不是从https://www.example.com调用 endpoints 应该返回非200状态代码 .

我可以在回复中看到 Access-Control-Allow-Origin Headers -
enter image description here

如果我的原始域名不是https://www.example.com,为什么我会获得200状态代码?

此外,我尝试从S3中的网站静态托管网站进行Ajax调用 . 我仍然得到200响应和JSON数据,即使我显然没有从www.example.com拨打电话 .

EDIT:

我最终重新创建了资源,只是为这个问题添加了一个实例 .

当我直接点击API endpoints 时,它允许我返回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头的旧代码) . 无论如何,它看起来像预期的那样运作 .

我觉得有趣的是我的浏览器让我直接点击 endpoints 而不会抛出CORS错误 . 谢谢您的意见 .

1 回答

  • 2

    CORS不是控制服务器行为方式的机制;它是告诉浏览器如何表现的 .

    请求将成功(即返回 200 ),但同源策略将阻止外部站点读取响应,除非有CORS指令允许它 .

相关问题