Safari 阻止对 Express API 的 CORS 请求

Posted

技术标签:

【中文标题】Safari 阻止对 Express API 的 CORS 请求【英文标题】:Safari blocks CORS request to Express API 【发布时间】:2016-04-06 02:34:05 【问题描述】:

我有一个简单的 node/express 服务器,用作我的 AngularJS 应用程序的 API。它运行在localhost:8080

let express = require('express');
...

let cors    = require('cors');
...

let app     = express();
app.use(cors());

let port    = Number(process.env.PORT || 8080);
...

app.use('/api', require('./routes'));
app.use('*', (req, res) => res.sendStatus(httpStatus[404]).end());

app.listen(port, () => logger.info("✔ Listening on port " + port));

相当基本的东西。 cors() 应该允许使用 GET,HEAD,PUT,PATCH,POST,DELETE 方法来自任何来源的请求。

我在 localhost:3000 的 Angular 应用程序只是向我的服务器发出 GET 请求,该请求在 Firefox 和 Chrome 上运行良好,但仅在 Safari 上为我提供以下内容:

XMLHttpRequest cannot load http://localhost:8080/api/drawings/all. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.

我认为CORS完全由服务器处理,不应该存在跨浏览器问题。我读过 Safari 在这方面更严格,但我想确保我的用户不必为了让网站正常工作而更改他们的偏好中的某些内容。即使在 Safari 的开发者控制台中,选中“禁用跨域限制”也无济于事。

我的服务器记录请求,并返回200 状态。

【问题讨论】:

清除缓存?根据github.com/photonstorm/phaser/issues/1355看来Safari可能有问题@ 谢谢,这解决了 CORS 问题,但现在我有一个奇怪的 angularJS 错误,我在其他浏览器中没有遇到过。我将开始另一个问题。 【参考方案1】:

清除 Safari 的缓存解决了这个问题。

【讨论】:

以上是关于Safari 阻止对 Express API 的 CORS 请求的主要内容,如果未能解决你的问题,请参考以下文章

使用我的 node/express rest api 服务器获取数据时 CORS 被阻止

发送 POST 数据时阻止 Safari 规范化 Unicode?

尽管从点击事件中调用,Safari 仍会阻止视频上的 play()

Node.JS OvernightJS Express CORS XMLHttpRequest 已被 CORS 策略阻止

Node JS Express 服务器 - 跨域请求被阻止,即使有所有正确的标头

Safari不包含COOKIE到第二个CORS请求中