尽管我的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);
答案 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