【发布时间】:2017-06-04 07:51:21
【问题描述】:
我正在尝试使用客户端浏览器上的 Ajax 请求访问 rss 提要。
$.ajax({
type: 'GET',
url: 'http://feeds.bbci.co.uk/news/business/rss.xml?edition=uk',
crossDomain: true,
dataType: 'xml',
success: function(responseData, textStatus, jqXHR) {
console.log(responseData)
},
error: function (responseData, textStatus, errorThrown) {
alert('failed.');
}
});
这给了我“Access-Control-Allow-Origin”错误。
我已经安装了 cors 包,所以它应该在我的服务器上启用,我错过了什么吗?
server.js 文件
var express = require('express');
var basicAuth = require('express-basic-auth')
var bodyParser = require('body-parser')
var cors = require('cors');
var app = express();
app.use(cors());
app.get('/', function (req, res) {
// res.send('Hello World');
res.sendFile(__dirname + '/views/index.html');
})
var routes = require('./routes');
app.use('/api', routes);
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("App listening at http://%s:%s", host, port)
})
编辑*完整错误 XMLHttpRequest 无法加载 http://feeds.bbci.co.uk/news/business/rss.xml?edition=uk。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8081' 因此不允许访问。
【问题讨论】:
-
等待 - 您正在查询 feeds.bbci.co.uk,它错过了相应的 CORS 标头。然后,您需要重新配置 BBC 服务器以包含 CORS 标头,而不是您自己的...?
-
是的,我正在查询 bbc 网络域,而不是我的节点 js 服务器。错误说 localhost 这就是为什么我很困惑这可能是我的结局?请求的资源上不存在“Access-Control-Allow-Origin”标头。原点'localhost:8081'
-
origin标头由您的客户端发送到 BBC 服务器。然而,请求的资源是 BBC 服务器,它不回复必要的 CORS 标头。 -
Origin: localhost:8081 仅表示请求跨源资源的域。不过,这个问题对我来说很奇怪,我接受 localhost:8081 没有 CORS 问题。你确定是这个特定的请求失败了吗?
-
是的,我 100% 确定。这让我很困惑。我可以尝试直接从我的服务器获取 rss 提要。因此,客户端将调用我的节点服务器上的端点,然后向 BBC RSS 提要发出请求。希望我不必通过我的服务器路由数据
标签: javascript node.js cors