启用 CORS 的服务器不拒绝请求

CORS-enabled server not denying requests

我正在尝试将 express Cors 与我的 resitfy 服务器一起使用,它似乎并没有拒绝来自其他 ip 的请求。我在本地工作,所以我尝试将 origin 设置为随机 public ip,但我的所有请求仍在通过

这是我的路线:

module.exports = function(app) {
    var user = require('./controllers/userController');
    var cors = require('cors');
    var corsOptions = require('./cors.json');


    app.post('/auth/signup', cors(corsOptions),user.createUser);
    app.post('/auth/login', cors(corsOptions), user.validateUser);
    app.post('/auth/generateKeys', cors(corsOptions), user.generateKeys);
    app.post('/auth/generateToken', user.generateToken);
};

这是我的 cors.json 文件,我在其中设置了一个随机 ip:

{
    "origin": "http://172.16.12.123",
    "optionsSuccessStatus": 200,
}

在路线上设置cors后,我可以在邮递员中看到以下内容,但请求仍在进行中?我希望访问被拒绝响应。

Access-Control-Allow-Origin →http://172.16.12.123

CORS 不会阻止任何人向您的应用程序发送 GET 或 POST 请求或暴露 API URL.

相反,它向 Web 浏览器表明 AJAX 请求被允许从域执行到此服务器。

但只有 AJAX 从域执行的请求是 CORS 控制的。在网络浏览器中输入 URL 不会激活 CORS: 它不是防火墙

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

事件顺序是:

  1. 域 A 在用户浏览器上执行 AJAX 以在域 B

  2. 上请求 API URL
  3. 用户的浏览器向目标域 B 发送基本的主要请求,并检查域 A 是否允许 CORS

  4. 如果允许,则执行AJAX请求,否则返回null

CORS 配置本身不会导致服务器拒绝请求。您不能仅通过 CORS 配置导致 server-side 阻塞请求。

当您配置 CORS 支持时,服务器做的唯一不同就是发送 Access-Control-Allow-Origin 响应 header 和其他 CORS 响应 header。就是这样。

cross-origin 限制的实际执行仅由浏览器执行,而不是由服务器执行。

因此,无论您对服务器进行什么 server-side CORS 配置,服务器仍会继续接受来自所有客户端和来源的请求;换句话说,来自所有来源的所有客户端仍然继续从服务器获得响应,就像它们本来应该的那样。

但是 浏览器 只会将 cross-origin 请求的响应暴露给特定来源的前端 JavaScript 代码 运行 如果服务器请求被发送到 opts-in 以通过响应 Access-Control-Allow-Origin header 允许该来源来允许请求。

这是您使用 CORS 配置唯一可以做的事情。您不能仅通过进行任何 server-side CORS 配置就使服务器仅接受和响应来自特定来源的请求。为此,您需要使用除 CORS 配置之外的其他东西。