虽然未设置Access-Control-Allow-Credentials,但我收到了CORS错误

时间:2015-12-10 06:18:05

标签: node.js heroku http-post cors

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

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

var cors = require('cors');

var app = express();

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

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

  

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

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

enter image description here

为什么抱怨credentials旗帜?

1 个答案:

答案 0 :(得分:1)

我们终于解决了这个问题。以下是我们的发现和引导我们解决问题的思路:

  • CORS问题只发生在POST,而不是GET。
  • 只有当我从网址以file://开头的本地HTML发出请求时才会发生CORS问题。我从http://localhost请求时没有问题。
  • file://协议发起POST请求时,原点为null。事实证明,问题在于null未涵盖*
  • Allow-Access-Control-Origin设置为null是不够的,因为来自原始null的请求显然包含凭据,因此我必须将Allow-Access-Control-Credentials设置为true

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

var cors = require('cors');

var app = express();

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