虽然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-Origin
为null
是不够的,因为显然来自原始的请求null
包括凭证,所以我必须将Allow-Access-Control-Credentials
为true
。
所以这里是我更新的服务器代码,它接受来自任何源的POST请求,包括移动应用程序中的web视图,该web视图与file://
:
var cors = require('cors'); var app = express(); app.configure(function() { app.use(cors({ origin: 'null', credentials: true })); });