使用CORS的Safari问题:Access-Control-Allow-Origin不允许使用Origin

时间:2015-03-21 19:41:48

标签: node.js safari cors

我们在其中一台服务器上有一个基于Node.js的应用程序(我们称之为'my.apiserver.com')。我们的客户在不同的域(my.client.com)中有网站。当用户访问我们客户的网站时,会收到一系列html页面,并向我们的服务器发送基于ajax的请求。除了最新的Safari版本(8)之外,这似乎适用于所有设备和浏览器。对于大多数(但奇怪的是不是全部)Safari-8用户,他们会收到以下这些行的错误消息:

  

XMLHttpRequest无法加载http://my.apiserver.com/views/view1.html。   来源http://my.client.com不被允许   访问控制允许来源

  

XMLHttpRequest无法加载   http://my.apiserver.com/ajax_endpoint1?id=12345。起源   Access-Control-Allow-Origin

不允许http://my.client.com

在我们的app.js文件中,节点应用程序具有如下所示的跨域安全设置:

/***************************************************************************/
/* configure CORS
/***************************************************************************/
app.use(function(req, res, next) {
  res.set('Access-Control-Allow-Origin', 'http://my.client.com');
  res.set('Access-Control-Allow-Credentials', true);
  res.set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.set('Access-Control-Allow-Headers', 'Origin, Product-Session, X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Referer, User-Agent');

  // intercept OPTIONS method
  if ('OPTIONS' == req.method) {
    res.send(200);
  }
  else {
    next();
  }
});

对于我们的角色设置失败的最新Safari的任何见解都将不胜感激。

由于

2 个答案:

答案 0 :(得分:9)

最后这不是一个角色问题,这是一个cookie问题。特别是它是第三方cookie问题,因为Safari的更高版本默认情况下不允许第三方cookie。由于我们是第三方,因此没有存储或传递cookie数据以传递回我们的服务器,并且由于某种原因问题本身表现为cors错误。启用第三方cookie后,api调用按预期工作。当然,现在我们需要解决这个问题。

答案 1 :(得分:1)

您可以从浏览器的Empty Caches菜单中disable Cross-Origin RestrictionsDevelop(出于开发目的)。

对我有用。