Javascript 用CORS保护API

Javascript 用CORS保护API,javascript,node.js,api,express,cors,Javascript,Node.js,Api,Express,Cors,我想用CORS保护我的API。我希望我的API只能从所选域进行调用访问 我正在使用node.js和express,因此我将以下内容添加到我的项目中: 和示例代码: var express = require('express') var cors = require('cors') var app = express() var corsOptions = { origin: 'http://example.com', optionsSuccessStatus: 200 } app.

我想用CORS保护我的API。我希望我的API只能从所选域进行调用访问

我正在使用node.js和express,因此我将以下内容添加到我的项目中:

和示例代码:

var express = require('express')
var cors = require('cors')
var app = express()

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200
}

app.get('/test', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for only example.com.'})
})
但是,如果我通过邮递员从localhost发出请求,我仍然会从这个路由中得到响应。这应该被阻止,并且只适用于来自一个域(example.com)的请求

我以前试过:

router.get('/test', cors(corsOptions), function(req, res, next) {
  console.log(corsOptions);
  res.header("Access-Control-Allow-Origin", "http://www.example.com);
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.status(200).send({ work: true });
});
但这也让我的邮递员的要求


我希望有一个API,只有当它出现在我的example.com页面上并且有JavaScript发送的请求时,它才可以被引用。

CORs只在浏览器中工作,所以它不会对像Postman这样在浏览器之外发出的请求产生任何影响。这是一项要求客户机自己实施CORs保护的技术

除非实现某种身份验证或基于时间的令牌,否则无法阻止POSTMAN或任何其他编程访问使用API。这就是基于web的API的本质。如果它们可以在您的网页中使用,那么其他任何人也可以通过编程方式使用它们

CORs的目的是防止其他网页从其自己的网页Javascript使用您的API。这就是它所保护的一切。事实上,如果另一个网站想从他们的服务器访问您的API,然后将结果放入他们自己的网页,他们可以这样做-CORs根本不限制浏览器之外的服务器或编程访问

有关保护API的一般主题的进一步讨论,请参阅以下参考资料:


我想你误解了CORS的工作原理。它由浏览器而不是服务器强制执行。有关更多信息,请查看答案