启用 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
事件顺序是:
域 A 在用户浏览器上执行 AJAX 以在域 B
上请求 API URL
用户的浏览器向目标域 B 发送基本的主要请求,并检查域 A 是否允许 CORS
如果允许,则执行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 配置之外的其他东西。
我正在尝试将 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
事件顺序是:
域 A 在用户浏览器上执行 AJAX 以在域 B
上请求 API URL
用户的浏览器向目标域 B 发送基本的主要请求,并检查域 A 是否允许 CORS
如果允许,则执行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 配置之外的其他东西。