当前位置: 首页 > 知识库问答 >
问题:

Node JS Express服务器-跨源请求被阻止,即使具有所有正确的头

狄新翰
2023-03-14

尽管我的nodejs服务器中有正确的头:

app.get('/api', function(req, res){
    res.header('Access-Control-Allow-Origin'. '*');
    res.header('Access-Control-Allow-Methods', 'GET');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');

    res.status(200).send({'a':'b'});
});

当我在火狐浏览器中发出请求时,我仍然会出错:

“阻止跨源请求:同一源策略不允许读取位于的远程资源。”http://www.example.com/api/. (原因:缺少CORS标头“访问控制允许原点”。)

以下是我在客户端提出请求的方式:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if(this.readyState === 4 && this.status === 200){
        console.log(this.response);
    }
};
xhr.open('GET', 'http://www.example.com/api', true);
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET');
xhr.setRequestHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
xhr.send(null);

共有2个答案

左丘涵畅
2023-03-14

您可以使用express尝试cors模块。

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

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}

app.use(cors(corsOptions));

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

如果你想为特定的领域。

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

var allowlist = ['http://example1.com', 'http://example2.com']
var corsOptionsDelegate = function (req, callback) {
  var corsOptions;
  if (allowlist.indexOf(req.header('Origin')) !== -1) {
    corsOptions = { origin: true }; // reflect (enable) the requested origin in the CORS response
  } else {
    corsOptions = { origin: false }; // disable CORS for this request
  }
  callback(null, corsOptions); // callback expects two parameters: error and options
}

app.get('/products/:id', cors(corsOptionsDelegate), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for an allowed domain.'});
});

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80');
});

有关详细信息,请单击此处

须敏学
2023-03-14

不要在客户端设置“访问控制允许源”,它应该只在服务器端添加。因此,服务器知道接受来自所有源的请求。

 类似资料:
  • 我也在应用程序根目录中使用。htaccess文件。(waleedahmad.kd.io/node)。

  • 问题内容: 因此,我有了这个Go http处理程序,该处理程序将一些POST内容存储到数据存储中,并检索其他一些信息作为响应。在后端,我使用: 在我的firefox OS应用程序中,我使用: 传入的部分都一直如此。但是,我的回复被阻止了。给我以下信息: 我尝试了许多其他操作,但是无法从服务器获得响应。但是,当我将Go POST方法更改为GET并通过浏览器访问该页面时,我得到的数据太糟糕了。我无法真

  • 如何通过 ajax 从远程 url 获取内容? jQuery ajax请求被阻止,因为跨源 控制台日志 跨来源请求被阻止:同一来源策略不允许读取http://www.dailymotion.com/embed/video/x28j5hv.的远程资源(原因:CORS标头“Access-Control-Allow-Origin”缺失)。 已阻止跨源请求:同源策略不允许读取位于的远程资源http://w

  • 我想连接到一个URL,这是阻止,使用python请求。 我使用了许多不同的代理服务器没有一个为我工作。https://free-proxy-list.net/ 回溯(最近一次调用last):文件“t.py”,第14行,在a=requests.get('https://my-url“,proxies=proxyDict)文件“/home/user/Documents/backend1/venv-li

  • 问题内容: 无法致电Spring REST服务 我的春季服务 我的AJAX代码 我收到以下错误:( 跨域请求被阻止:同源策略禁止读取位于http:// localhost:8080 / SpringMVC / rest / MAS / authenticate 的远程资源。可以通过将资源移到同一域或启用CORS来解决此问题。 我也尝试过。它将我的body对象附加到URL中,URL变为不同的URL,