【问题标题】:Using CORS Still Give Cross Origin Error使用 CORS 仍然会出现跨域错误
【发布时间】:2016-03-21 13:18:47
【问题描述】:

我正在尝试使用cors 模块通过角度$http 访问节点路由。我试过一个简单的

app.use(cors());

但仍然得到错误。我试过从the cors documentation a whitelist of URLs添加

var corsOptions = {
  origin: function(origin, callback){
    var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
    callback(null, originIsWhitelisted);
  }
};

app.get('/someroute/:someparam/', cors(corsOptions), function(req, res, next){
  mymodule.getData(req.params.someparam, function(err, data){
      if (err){
        console.log('error with route', err);
      }else{
        res.json({result: data});
      }
  });
});

但我仍然收到错误

XMLHttpRequest 无法加载 localhost:8888/someroute/undefined。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。

我认为使用 cors 模块是为了避免这个问题。我该如何解决?

【问题讨论】:

  • 我认为您还需要允许它在服务器端
  • CORS 标头需要在服务器上设置,而不是在客户端上。
  • 您到底是如何将 Web 应用程序加载到浏览器中的?您的 URL(如错误消息中所引用的)似乎根本没有与之关联的任何方案,并且错误消息抱怨您没有使用 HTTP。
  • @Pointy 这一切都在我的server.js 文件中,所以当我在终端中使用node server.js 启动我的服务器时,它不应该存在于服务器端吗?
  • @Quentin App 使用app.get('/', function(req, res){ res.sendfile('./index.html'); }); 加载到浏览器中,所以我转到 localhost:8888 然后我看到了索引页面。在该页面上有一个 ng-click 按钮,$http 会到达我在问题中显示的路线。

标签: javascript angularjs ajax node.js cors


【解决方案1】:

这里的问题是您的客户端需要对 URL 进行请求

http://localhost:8888/someroute/undefined

相反,您的客户正在请求

localhost:8888/someroute/undefined

浏览器使用localhost 模式将其解释为对主机8888 的请求。但是,localhost 不是 Chrome 支持的 CORS 方案。只有httphttpsdata 之类的东西。

在某处,您的客户端代码会执行类似的操作

xhr.send("localhost:8888/...")

但它需要一个领先的方案,例如http://https://

请注意,如果您尝试使用 fileabout 方案请求资源,则会收到类似的错误。

【讨论】:

  • 那我该如何解决呢?我尝试将http:// 添加到白名单URL 和$http.get() 的开头,但它似乎对在哪里查找路由感到困惑。
  • 您的客户需要请求正确的事情。您的请求甚至可能没有发送到服务器。无论是否如此,Chrome 都会关闭请求,因为您在某处执行 xhr.send("localhost:8888/..."),而 Chrome 将其视为非法的 localhost 方案。
  • 这是因为我传递给路由的参数是目录的位置,而我没有对它进行 URI 编码,所以它不知道它到底要去哪里。当我对其进行编码并将其通过路由传递到节点模块时,一切都已处理并且看起来工作得很好!感谢您的帮助!
猜你喜欢
  • 2021-09-21
  • 2020-06-22
  • 2021-08-08
  • 2019-11-29
  • 2020-01-24
  • 2019-04-16
  • 2017-04-29
  • 2020-05-25
  • 2019-04-29
相关资源
最近更新 更多