2016-07-15 73 views
1

我做了一个简单的节点服务器,我需要它作为Cross Origin的$http.get()调用,所以我将所需的标题添加到app.use作为this的答案中的详细信息。最后,服务器代码 -

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. 

我怎样才能让Cross Origin $http.get正确地拨打index.html

+1

为什么允许在自己的网络服务器CORS并等待其将允许苹果的服务器上? –

+0

我是新的节点,请给我一个解决方案,如果yoe有.. – URL87

+1

简短的回答:这是不可能的,从您的网页进行跨域请求,而CORS是不允许在服务器上。由于你没有控制iTunes,所以你不能这样做 –

回答

1

实际上您并不了解跨源资源共享是如何工作的。在你提出请求的服务器上应该允许跨域请求,而不是在你服务于你的页面的服务器上。

所以,答案是你不能向苹果网站提出请求,如果他们不允许你这样做。

P.S.您已允许其他网站通过将此代码添加到您的明确应用以请求您的网站:

app.all('/', function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    next(); 
+0

所以我可以打电话到'$ http.get('http://itunes.apple.com/search',{...})'并找回回应JSON? – URL87

+2

你不能这样做。 –

+0

你不能从你的网页的JavaScript做出这样的请求。 – Sergey