节点JS Express服务器 - 交叉源请求被阻止,即使有所有正确的标头

时间:2018-05-26 12:45:59

标签: javascript node.js express web

尽管我的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'});
});

当我在firefox浏览器中发出请求时,我仍然收到错误:

“跨源请求已阻止:同源策略禁止在http://www.example.com/api/读取远程资源。(原因:缺少CORS标头'Access-Control-Allow-Origin'。”

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

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 个答案:

答案 0 :(得分:0)

不要在客户端设置“Access-Control-Allow-Origin”,只应在服务器端添加。因此,服务器知道接受来自所有来源的请求。

答案 1 :(得分:0)

您可以尝试使用cors的{​​{1}}模块。

express

如果要使用特定域。

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')
})

要详细了解click here

HTH