【问题标题】:No Access-Control-Allow-Origin error in Meteor appMeteor 应用程序中没有 Access-Control-Allow-Origin 错误
【发布时间】:2017-09-02 19:08:46
【问题描述】:

我在 chrome 中添加了 CORS 扩展。当从 localhost 调用 ajax 时,我得到了 XML 形式的响应。如果我禁用 CORS 扩展,我会收到以下错误。我在这个社区提到了很多问题。但我无法解决我的问题。它可能会重复,但我在问这个问题以寻求帮助。

XMLHttpRequest 无法加载 https://buzz.machaao.com/feed。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin '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);
      }
    });

【问题讨论】:

    标签: javascript http meteor cors localhost


    【解决方案1】:

    https://buzz.machaao.com/feed 站点不发送 Access-Control-Allow-Origin 响应标头,因此您需要改为通过代理发出请求 — 如下所示:

    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 解释了为什么浏览器不允许您从 Web 应用程序中运行的前端 JavaScript 代码访问响应跨域,除非响应包含 Access-Control-Allow-Origin 响应标头。

    https://buzz.machaao.com/feed 没有 Access-Control-Allow-Origin 响应标头,因此您的前端代码无法跨域访问响应。

    您的浏览器可以很好地获得响应,您甚至可以在浏览器开发工具中看到它——但是您的浏览器不会将它暴露给您的代码,除非它有一个 Access-Control-Allow-Origin 响应标头。所以你必须改为使用代理来获取它。

    代理向该站点发出请求,获取响应,添加 Access-Control-Allow-Origin 响应标头和所需的任何其他 CORS 标头,然后将其传递回您的请求代码。添加了Access-Control-Allow-Origin 标头的响应是浏览器看到的,因此浏览器允许您的前端代码实际访问响应。

    【讨论】:

      猜你喜欢
      • 2017-12-06
      • 1970-01-01
      • 2016-02-13
      • 2018-09-19
      • 2018-02-07
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多