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

时间:2017-07-13 00:43:40

标签: node.js express cors restify

我正在尝试使用express Cors和我的resitfy服务器,它似乎并没有拒绝来自其他ips的请求。我在本地工作所以我尝试将原点设置为随机的公共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

2 个答案:

答案 0 :(得分:6)

CORS配置本身不会导致服务器拒绝来自任何IP的请求。你不能只通过CORS配置来做到这一点。

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

CORS限制的实际执行仅由浏览器完成,而不是由服务器完成。

因此,无论您使用哪种服务器端CORS配置,服务器仍然会继续接受来自所有客户端的请求,否则它将会来源;换句话说,来自所有来源的所有客户端仍然继续从服务器获得响应,就像它们一样。

但是 browsers 只会将来自跨源请求的响应暴露给在特定来源运行的前端JavaScript代码,如果请求被发送到opts-in的服务器通过响应{来允许请求{1}}允许该来源的标题。

这是使用CORS配置唯一可以做的事情。您不能仅通过执行任何服务器端CORS配置使服务器仅接受并响应来自特定源的请求。为此,您需要使用除CORS配置之外的其他内容。

答案 1 :(得分:3)

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

相反,它向Web浏览器指示允许AJAX请求来自它们执行的域的服务器。

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

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

事件的顺序是:

  1. 域A在用户浏览器上执行AJAX以请求域B上的API URL

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

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