虽然Access-Control-Allow-Credentials没有设置,但我得到一个CORS错误

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

以下是应用程序中如何启用CORS:

 var cors = require('cors'); var app = express(); app.configure(function() { app.use(cors()); }); 

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

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

但是,在响应中没有看到任何Access-Control-Allow-Credentials标头。 Chromenetworking标签中的失败请求和回复如下:

在这里输入图像说明

为什么它会抱怨credentials标志?

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

  • CORS问题只发生在POST,而不是GET。
  • CORS问题只有在我以URL开头的本地HTML发出请求时才会发生。 当我从http://localhost请求时,没有任何问题。
  • file://协议启动POST请求时,原点为null 。 原来问题是null不包含在通配符*
  • Allow-Access-Control-Originnull是不够的,因为显然来自原始的请求null包括凭证,所以我必须将Allow-Access-Control-Credentialstrue

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

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