CORS的Safari问题:访问控制允许起源不允许起源



我们的一台服务器上有一个基于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.起源http://my.client.com不被Access Control Allow Origin 允许

在我们的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();
  }
});

如果您能了解为什么我们的cors设置在最新的Safari中失败,我们将不胜感激。

感谢

最终这不是cors问题,而是cookie问题。具体来说,这是一个第三方cookie问题,因为Safari的后续版本默认不允许使用第三方Cookie。由于我们是第三方,没有cookie数据被存储或传递回我们的服务器,出于某种原因,问题表现为cors错误。一旦启用了第三方cookie,api调用就会按预期工作。当然,现在我们需要解决cookie问题。

您可以清空或禁用浏览器中的缓存,然后在Safari的Develop菜单中选中Disable Cross-Origin Restrictions(这仅用于开发目的)。

它对我有效。

最新更新