【问题标题】:CORS issue for Ionic + expressIonic + express 的 CORS 问题
【发布时间】:2016-05-05 08:43:18
【问题描述】:

我创建了一个应用程序,该应用程序正在访问/获取来自不同域(例如 domain_name)的 mongo/node+express 的数据。

get函数的代码是:

var request = $http({
            method: 'GET',
            url: 'https://domain_name.users.io/categories/list',
            withCredentials: true  /* to get the Cookie value generated at server-side */
        });

在快递方面,为了避免 CORS 问题,添加了以下代码:

 res.header("Access-Control-Allow-Origin", "*");
 res.header("Access-Control-Allow-Methods","GET,PUT,POST,DELETE,OPTIONS");
 res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
 res.header("Access-Control-Allow-Credentials", "true");

对于上述情况,我收到以下错误:

XMLHttpRequest cannot load https://domain_name.users.io/data/list. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:8100' is therefore not allowed access.

我已经检查了 API“https://domain_name.users.io/data/list”并且没有问题,因为我可以看到数据(在浏览器上点击时)。

有人可以帮我做同样的事情吗

【问题讨论】:

标签: angularjs node.js mongodb express ionic-framework


【解决方案1】:

必须设置标题:

var request = $http({
            method: 'GET',
            url: 'https://domain_name.users.io/categories/list',
           headers:{'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
            withCredentials: true  /* to get the Cookie value generated at server-side */
        });

==============ON节点侧===============

app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization, Access-Control-Allow-Origin, Access-Control-Allow-Headers');
 next();
});

【讨论】:

    【解决方案2】:

    此外,* 过于宽松,会破坏凭据的使用。所以使用https://domain_name.users.io/data/list 而不是你使用*

    你不能像*那样做,因为这是安全的一部分,如果你想允许凭据,那么你的 Access-Control-Allow-Origin 不能使用 *。

    更多信息请阅读here

    【讨论】:

    • res.header("Access-Control-Allow-Origin", "*"); 更改为res.header("Access-Control-Allow-Origin", "https://domain_name.users.io") 现在收到此错误``XMLHttpRequest 无法加载domain_name.users.io/data/list。 “Access-Control-Allow-Origin”标头包含多个值“domain_name.users.io, *”,但只允许一个值。因此,Origin 'localhost:8100' 不允许访问。`
    • 我的错,我认为 localhost 是开发版本,而 domain.com 是 API 服务器。因此,您希望它仅将 Access-Control-Allow-Origin 标头设置为 localhost:8100,不附加其他值。
    • 谢谢它的工作:) .. 但是如果我想从手机访问相同的内容怎么办?如果我创建一个 .apk 文件并将其安装在移动设备上,我认为它不会。正确的 ?那么解决这个问题的方法是什么???
    • 据我所知,对于 .apk 没有什么可做的
    • 好的。我也试过了。创建了一个 .apk 文件并将其安装到我的移动设备上。但是现在数据没有来,我认为这是因为我们在服务器端定义的来源。即 localhost:8081
    猜你喜欢
    • 2017-04-16
    • 2018-02-09
    • 2018-03-28
    • 2019-01-12
    • 1970-01-01
    • 2023-03-08
    • 2021-05-09
    • 2021-09-04
    • 1970-01-01
    相关资源
    最近更新 更多