我做了一个简单的节点服务器,我需要它是跨源的$http.get()
调用,所以我将所需的标头添加到app.use
作为本答案中的详细信息。最后服务器代码是——
var express = require('express');
var app = express();
var port = process.env.PORT || 3000;
app.use(express.static('.'));
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.listen(port);
console.log('server runs on port: ' + port);
在我的index.html
里,有棱角分明的$http.get()
在呼唤另一个起源——
$http.get('http://itunes.apple.com/search', {
term: 'johnson'
});
但这个调用仍然被浏览器拒绝并返回错误 -
XMLHttpRequest cannot load https://itunes.apple.com/search. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
如何正确进行跨源$http.get
从index.html
调用?
您实际上不了解跨源资源共享的工作原理。跨源请求应该在您向其发出请求的服务器上允许,而不是在您提供页面的服务器上。
因此,答案是,如果他们不允许您这样做,则无法向Apple网站提出请求。
附言您已允许其他网站通过向您的快速应用程序添加此代码来向您的网站发出请求:
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();