我用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
旗帜?
答案 0 :(得分:1)
我们终于解决了这个问题。以下是我们的发现和引导我们解决问题的思路:
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 }));
});