【问题标题】:Android app : Cross-Origin Request Blocked The Same Origin Policy disallows reading the remote resourceAndroid 应用程序:跨域请求被阻止同源策略不允许读取远程资源
【发布时间】:2015-09-19 19:16:46
【问题描述】:

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

跨域请求被阻止:同源策略不允许读取远程资源 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'}},


        });


    });

有什么帮助吗? 非常感谢。

【问题讨论】:

  • 如果您想从您的应用程序发出跨域请求,请考虑在您的 config.xml 文件中添加
  • 我做到了,但还是不行:(

标签: android angularjs cordova rest cors


【解决方案1】:

几个月以来,access origin="*" 不够用。

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

然后,在你的 config.xml 中添加一行这样的行

<allow-navigation href="*" />

不推荐使用*,但它适用于所有情况。你可以像这样指定路径http://yourWebSite.com/*

【讨论】:

  • 感谢您的提议,但我已经在 android 上安装了插件“cordova-plugin-whitelist”。我也做了 在我的 config.xml 中,我仍然有同样的错误!
  • 你如何测试这个?你有什么手机或模拟器可以测试吗?
  • 是的,我在 genymotion 模拟器上运行它,它显示了我可以在它们之间导航的视图,但它们不包含其余数据,所以我从浏览器中尝试只是看到错误
  • 同样,当我有相同的 Web 格式项目,并且我在本地主机上运行它时,它工作正常。但我对移动项目很感兴趣。
  • 曾经发生在我身上的是模拟器没有连接到互联网。它没有与我的计算机共享。也看看这个!
【解决方案2】:

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

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

所以你有两个解决方案:

  • 删除插件 cordova-plugin-whitelist 并添加cordova-plugin-legacy-whitelist 然后cordova 的行为将与cordova 3.x 一样,只检查访问源(不建议考虑安全性)
  • 或者您了解 Content-Security-Policy,例如通过阅读 this page 并更新您的 html。

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

编辑: 现在我记得了,不是它在最新版本中发生了变化,而是从 Kit-Kat 开始在 android 上检查内容安全策略,所以同一个应用程序与 cordova-plugin-whitelist 和没有配置的 CSP 将在 android

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

【讨论】:

  • CSP 不允许应用无法提供的内容。它只是过滤已经提供的内容。
  • 对不起,但真的不明白这个评论的目的......事实是,使用最新版本的cordova+最新版本的android,如果你不配置CSP,你就不能交叉源请求。你在哪里读到我建议配置 csp 将允许应用程序无法提供的东西???
  • 您是否知道您提供的链接已在我的评论中?而且我仍然没有看到与您的评论相关的链接...
  • 这来自您在回答中提供的链接:If you include the plugin and do not include a CSP, your access falls back to the access tag in config.xml, which is probably * (i.e. everything allowed). 因此,没有 CSP -> 一切都已被允许(默认情况下,根据您的 config.xml 的权限)。进一步使用 CSP 不能更改 config.xml 中未提供的内容。在我之前的评论中发送链接的问题中也有同样的说法。
猜你喜欢
  • 2021-04-04
  • 2014-10-17
  • 2015-07-22
  • 2018-04-20
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多