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
我正在尝试使用 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