2016-07-15 71 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