尽管未设置 Access-Control-Allow-Credentials,但出现 CORS 错误
Posted
技术标签:
【中文标题】尽管未设置 Access-Control-Allow-Credentials,但出现 CORS 错误【英文标题】:I'm getting a CORS error although Access-Control-Allow-Credentials is not set 【发布时间】:2016-03-15 16:20:57 【问题描述】:我用 node.js 和 express 编写了一个服务器应用程序。该应用程序使用 cors 节点包来发送来自 "*"
的 POST 请求,因为我需要能够从移动应用程序发布。
以下是在应用中启用 CORS 的方式:
var cors = require('cors');
var app = express();
app.configure(function()
app.use(cors());
);
当我尝试从浏览器发布请求时,我收到此错误:
XMLHttpRequest 无法加载 url。当凭证标志为真时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”。因此不允许访问 Origin 'null'。
但是,我在响应中看不到任何 Access-Control-Allow-Credentials 标头。这是失败的请求和 Chrome 网络选项卡中的响应:
为什么它抱怨credentials
标志?
【问题讨论】:
能否向我们展示如何在您的应用中启用和配置 CORS? 我添加了一个代码sn-p。 请注意app.configure
在 Express 4.x 中被删除 github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x
【参考方案1】:
我们终于解决了这个问题。以下是我们的发现和导致我们找到解决方案的思路:
CORS 问题仅发生在 POST 中,而不是 GET。 CORS 问题仅在我从 URL 以file://
开头的本地 html 发出请求时发生。当我向http://localhost
请求时没有问题。
当从file://
协议发起一个POST 请求时,来源是null
。原来问题在于null
没有被通配符*
覆盖。
将Allow-Access-Control-Origin
设置为null
是不够的,因为显然来自源null
的请求包含凭据,所以我不得不将Allow-Access-Control-Credentials
设置为true
。
这是我更新的服务器代码,它接受来自任何来源的 POST 请求,包括与 file://
一起使用的移动应用程序中的 Web 视图:
var cors = require('cors');
var app = express();
app.configure(function()
app.use(cors( origin: 'null', credentials: true ));
);
【讨论】:
以上是关于尽管未设置 Access-Control-Allow-Credentials,但出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
尽管未设置 Access-Control-Allow-Credentials,但出现 CORS 错误
Chrome Beta 问题:尽管 SameSite cookie 设置为“无”且安全,但未收到第三方 cookie