ionic 应用程序无法使用 $http 连接启用了 cors 的服务器

ionic app cannot connect cors enabled server with $http

我正在尝试使用 ionic 框架构建移动应用程序。当我的应用程序尝试连接服务器以获取 json(服务器是网络 api 并且启用了 cors)时,它只是 returns 404 在 genymotion 和真实设备上。但是当我 运行 在浏览器中使用 ionic serve 应用程序时,一切正常。

我很确定 CORS 可以正常工作。这里的响应 header 我在浏览器中运行应用程序时得到的。

回应

Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:395
Content-Type:application/json; charset=utf-8
Date:Fri, 08 May 2015 20:24:04 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/7.0
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

请求

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, lzma, sdch
Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:*******:14400
Origin:http://192.168.0.28:8100
Pragma:no-cache
Referer:http://192.168.0.28:8100/

Config.xml 在配置中有 <access origin="*"/> 这一行

在我的 app.js 中,我删除了所有 http 调用的 X-Requested-With header。

.config(['$httpProvider', function($httpProvider) {

        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];  
    }
])

我简单地使用 get 请求到我工厂的服务器 类。

$http.get(serverPath + "/api/mobilerest/mainPage");

当我运行在Genymode或真实设备中应用时,响应是404,statusText是'not found'。我很确定 web api 正在工作,这种行为的原因是基于离子的应用程序,我的应用程序是本地文件并且协议是 file:/// 所以 Origin header 在请求中为空,然后是服务器 returns 404。我还尝试了一个没有任何服务器的本地文件,我得到了与应用程序中相同的错误。

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:server:14400
Origin:null
Pragma:no-cache

我是不是漏掉了什么?

cordova-plugin-whitelist目前好像是"mandatory"。

安装它:

cordova plugin add cordova-plugin-whitelist

配置config.xml

您可以使用 * 保留当前设置或更改为更严格的规则

添加 html 政策 在 index.html,您还应添加一个策略。 要授权一切,这里是:

 <meta http-equiv="Content-Security-Policy" content="default-src *;
 style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'
 'unsafe-eval'"

您可以直接进入配置 .xml 文件并编辑此行

<access origin="*://*/*" />

and you can call any data with out intruption of CORS in console thank you plz apply this code your ionic app