Android应用:跨源请求已阻止同源策略禁止读取远程资源

时间:2015-07-02 10:02:03

标签: android angularjs cordova rest cors

我在Cordova中创建Android应用程序使用AngularJs消耗REST服务, 我首先在浏览器上通过此URL测试此应用程序 file:/// C:/Users/Users/MyApps/project/platforms/android/assets/www/index.html#/demande/list但是stil给出了这个错误:

  

阻止跨源请求:同源策略禁止读取远程资源   http://10.0.2.2:8080/springrestprojet/rest/demande。原因:CORS请求失败。

我正在使用CORS过滤器来启用访问权限。 这是我的service.js代码:

'use strict';

  angular.module('workflowService', ['ngResource']).
    factory('Demande', function ($resource) {
          return $resource('http://10.0.2.2:8080\:8080/springrestprojet/rest/demande/:id', {}, {
            'save': {method:'PUT', 
                headers: {'Content-Type': 'application/json', 
   'Access-Control-Allow-Origin':'*',
   'Access-Control-Allow-Methods' : 'POST, GET, OPTIONS, PUT',
   'Access-Control-Request-Method':'*',
   'Access-Control-Allow-Headers':'*',
   'Accept': 'application/json'}},


        });


    });

请帮忙吗? 非常感谢。

2 个答案:

答案 0 :(得分:0)

几个月后,access origin="*"还不够。

尝试安装此插件sudo cordova plugin add https://github.com/apache/cordova-plugin-whitelist

然后,在config.xml中添加一行

<allow-navigation href="*" />

*并非推荐,但它适用于所有事情。您可以指定此http://yourWebSite.com/*

之类的路径

答案 1 :(得分:-1)

我怀疑在最新版本中,插件cordova-plugin-whitelist需要在项目的每个html文件中配置元http-equiv =“Content-Security-Policy”。

对于第一个版本,它只显示警告,但考虑到这里看到的几个问题,可能行为已经改变......

所以你有两个解决方案:

  • 删除插件cordova-plugin-whitelist并添加cordova-plugin-legacy-whitelist然后cordova将与cordova 3.x一样,其中仅检查访问来源(不推荐安全性)
  • 或者您了解内容安全政策,例如阅读this page并更新您的htmls。

有关Raymond Camden's blogin the plugin's documentation的更多信息。

编辑:现在我记得,并不是它在最新版本中更改了内容安全策略在Android上以Kit-Kat开头检查,因此与cordova-plugin-whitelist相同的应用程序没有配置CSP可以在android&lt; 4.4并且在4.4+中失败。

请注意所有cordova / phonegap开发人员,在kitkat或lolypop中测试您的CSP代码,否则您可能会有惊喜!