我正在尝试使用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
答案 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
事件的顺序是:
域A在用户浏览器上执行AJAX以请求域B上的API URL
用户浏览器向目标域B发送基本主要请求,并检查域A是否允许CORS
如果允许,则执行AJAX请求,否则返回null