2017-04-07 91 views
2

我向CORM添加了CORS擴展。當從localhost調用ajax時,我以XML的形式得到響應。如果我禁用CORS擴展,我得到以下錯誤。我在這個社區提到了很多問題。但我不能解決我的問題。它可能會重複,但我正在問這個問題希望有幫助。Meteor應用程序中沒有訪問控制 - 允許 - 來源錯誤

XMLHttpRequest無法加載https://buzz.machaao.com/feed。對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在「訪問控制 - 允許來源」標頭。因此不允許訪問原產地'http://localhost:3000'。響應有HTTP狀態代碼401 ..

而且我的代碼是

HTTP.get('https://buzz.machaao.com/feed',{ 
    headers: { 
     "Access-Control-Allow-Origin" : "*" 
     } 
     }, (err, res) => { 
     if(err) { 
      console.log(err); 
     } 
     else { 
      console.log(res); 
     } 
    }); 

回答

3

https://buzz.machaao.com/feed網站不發送Access-Control-Allow-Origin響應頭,所以你需要通過代理instead-,使您的要求像這樣:

var proxyUrl = 'https://cors-anywhere.herokuapp.com/', 
    targetUrl = 'http://catfacts-api.appspot.com/api/facts?number=99' 

HTTP.get(proxyUrl + targetUrl, 
    (err, res) => { 
    if(err) { 
     console.log(err); 
    } 
    else { 
     console.log(res); 
    } 
}); 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS解釋了爲什麼瀏覽器不會讓JavaScript的一個Web應用程序,除非重新運行代碼,你從前端訪問響應跨域響應頭包括一個Access-Control-Allow-Origin響應頭。

https://buzz.machaao.com/feed沒有Access-Control-Allow-Origin響應頭,所以沒有辦法你的前端代碼可以訪問響應跨來源。

您的瀏覽器可以很好地得到響應,甚至可以在瀏覽器devtools中看到它 - 但您的瀏覽器不會將其暴露給您的代碼,除非它具有Access-Control-Allow-Origin響應標頭。所以你必須改用代理來獲取它。

代理向該站點發出請求,獲取響應,添加Access-Control-Allow-Origin響應頭和所需的任何其他CORS頭,然後將該頭傳回給您的請求代碼。並且添加的Access-Control-Allow-Origin標頭的迴應是瀏覽器所看到的,因此瀏覽器可讓您的前端代碼實際訪問響應。

相關問題