我用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网络标签中的失败请求和响应:
为什么会抱怨 credentials
旗帜?
1 回答
我们终于解决了这个以下是我们的研究结果和引导我们解决问题的思路:
CORS问题仅发生在POST,而不是GET .
只有当我从URL为
file://
的本地HTML发出请求时才会发生CORS问题 . 当我从http://localhost
请求它时没有问题 .从
file://
协议启动POST请求时,原点为null
. 事实证明,问题是null
未被通配符*
覆盖 .将
Allow-Access-Control-Origin
设置为null
是不够的,因为显然来自原始null
的请求包含凭据,因此我必须将Allow-Access-Control-Credentials
设置为true
.所以这是我更新的服务器代码,它接受来自任何来源的POST请求,包括与
file://
一起使用的移动应用程序中的Web视图: