2017-04-07 16 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标头的回应是浏览器所看到的,因此浏览器可让您的前端代码实际访问响应。

相关问题