【问题标题】:Safari issue with CORS: Origin is not allowed by Access-Control-Allow-OriginCORS 的 Safari 问题:Access-Control-Allow-Origin 不允许来源
【发布时间】:2015-05-25 01:59:54
【问题描述】:

我们的其中一台服务器上有一个基于 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 上失败的见解将不胜感激。

谢谢

【问题讨论】:

  • 其实读起来没问题。有一些 issue 带有 Amazon S3 存储桶和 Webkit。主要是:亚马逊不提供完整的 CORS 支持。这有什么意义吗?您是否尝试过允许任何带有 '*' 的来源?
  • 感谢 eljefedelrodeodeljefe。是的,我们确实在早期尝试过将 origin 设置为 *,但由于我们使用的是 allow-creds,所以它需要具体说明。

标签: node.js safari cors


【解决方案1】:

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

【讨论】:

【解决方案2】:

您可以从浏览器的Develop 菜单中Empty Cachesdisable Cross-Origin Restrictions(用于开发目的)。

它对我有用。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2013-02-05
    • 2011-10-27
    • 2012-11-04
    相关资源
    最近更新 更多