CORS如何在AWS、NodeJ和其他web服务中工作



我正在进行一个AWS项目,注意到为了允许CORS,我的前辈们设置了headers属性Access-Control-Allow-Origin作为响应。所以整个反应就像:

module. exports.handlerFunction = async ( event, content) => {
// code here for DB calls and other logic
return {
headers: {
"Access-Content-Allow-Origin" : "*"
},
statusCode: 200,
body: result
};
}

我的想法是,它是如何工作和允许CORS的?。如果我们不希望origin执行任何操作,并且已经执行了"Access-Content-Allow-Origin": "https://example.com",该怎么办。

由于我们在响应中设置了这个,所以原本不应该做任何事情而只是返回的原点,现在已经做了所有事情,然后以CORS的错误响应。我问我的学长,"这是怎么回事,CORS是怎么回事?",得到的回答是它的浏览器属性和浏览器发送飞行前请求并检查CORS。但我们在最后检查CORS,一旦每一件事都完成了,飞行前请求是如何跳过我们所有的检查DB和API调用,并在最后降落并检查响应头的。他们并没有回答,说了同样的飞行前概念。我问了下一个问题"浏览器有飞行前的概念来检查CORS,邮递员、cUrl请求怎么样,然后通过各种程序进行API调用,如NodeJ中的node-fatch、request、https API调用模块,他们也进行飞行前调用吗">

此外,当我创建NodeJs express Server应用程序时,我使用了cors.js作为NPM模块。在进入任何API函数之前,在每次调用进入时,我都检查了CORS,并且只允许允许允许的源进入。代码类似于:

const CORS = require('cors'),
express = require('express');
const app = express();
let allowedOrigin = ['https://example.com'];
let corsOps = {
origin: (origin, cb) => {
if (allowedOrigin.includes(origin))
cb(null, true);
else
cb(new Error('Not allowed'));
}
};
app.use(CORS(corsOps));

这是在调用任何函数之前检查的,而不是在响应时。

我搜索了很多关于这种行为的信息,并看到了在头中使用CORS的多个例子,它是如何在头中工作的?。

对我来说,是我的后端停止调用并检查谁在调用后端API。

发出请求的人如何在头文件和后端文件中设置属性,只需查看头文件属性而不检查调用的源文件,就可以向任何人打开其访问权限?

当浏览器执行AJAX调用时,它们首先检查目标原点是否与当前原点匹配,也就是window.location.origin。如果不是,则检查目标源是否接受window.location.origin作为CORS请求的源。如果没有,浏览器将显示臭名昭著的No 'Access-Control-Allow-Origin' header is present on the requested resource.错误消息。

如果可以进行请求,则浏览器在值为window.location.origin的HTTP请求中包括Origin报头。

有多种方法可以在后端设置CORS策略:

  1. 使用通配符接受所有原点
  2. 仅接受一组预先配置的原点
  3. 逐请求动态取Origin头的值作为"Access-Content-Allow-Origin的值

在最后一种情况下,原点可能被明显欺骗,如下所示:

curl -H"Origin: https://www.example.com" https://api.example.com/some/path

服务器是否应该为请求提供服务显然不应该取决于Origin报头,而是取决于其他因素,例如Authorization报头或适当的授权Cookie;请求参数等的有效性

相关内容

最新更新