【问题标题】:I'm getting a CORS error although Access-Control-Allow-Credentials is not set尽管未设置 Access-Control-Allow-Credentials,但出现 CORS 错误
【发布时间】:2016-03-15 16:20:57
【问题描述】:

我用 node.js 和 express 编写了一个服务器应用程序。该应用程序使用 cors 节点包来发送来自 "*" 的 POST 请求,因为我需要能够从移动应用程序发布。

以下是在应用中启用 CORS 的方式:

var cors = require('cors');

var app = express();

app.configure(function() {
  app.use(cors());
});

当我尝试从浏览器发布请求时,我收到此错误:

XMLHttpRequest 无法加载 url。当凭证标志为真时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”。因此不允许访问 Origin 'null'。

但是,我在响应中看不到任何 Access-Control-Allow-Credentials 标头。这是失败的请求和 Chrome 网络选项卡中的响应:

为什么它抱怨credentials 标志?

【问题讨论】:

标签: node.js heroku http-post cors


【解决方案1】:

我们终于解决了这个问题。以下是我们的发现和导致我们找到解决方案的思路:

  • CORS 问题仅发生在 POST 中,而不是 GET。
  • CORS 问题仅在我从 URL 以 file:// 开头的本地 HTML 发出请求时发生。当我向http://localhost 请求时没有问题。
  • 当从file:// 协议发起一个POST 请求时,来源是null。原来问题在于null 没有被通配符* 覆盖。
  • Allow-Access-Control-Origin 设置为null 是不够的,因为显然来自源null 的请求包含凭据,所以我不得不将Allow-Access-Control-Credentials 设置为true

这是我更新的服务器代码,它接受来自任何来源的 POST 请求,包括与 file:// 一起使用的移动应用程序中的 Web 视图:

var cors = require('cors');

var app = express();

app.configure(function() {
  app.use(cors({ origin: 'null', credentials: true }));
});

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 2012-03-25
    • 2022-01-13
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2021-08-17
    • 2019-04-01
    • 1970-01-01
    相关资源
    最近更新 更多