离子原生app正在发送标题Origin:file://导致问题

时间:2016-09-05 06:08:59

标签: android angularjs cordova ionic-framework

我已经开始在Ionic 1中构建简单的Todo应用程序,我发现了Origin标题的问题。 (CORS相关)

如果我跑

ionic serve

在浏览器中一切正常,我可以在apache(tomcat)上向我的REST API发出请求。但是当我为Android甚至离子查看器构建我的应用程序时,所有请求都会失败。使用chrome调试器我设法找到了问题。

原生app发送标题(仅在android上测试)

Origin: file://

导致我的服务器拒绝请求。在我看来它应该与主机发送正确的Origin标头。下面附有更多详细信息的屏幕截图。

Problem illustration

我该怎么办?

在此处找到相关主题:CORS, Cordova, AngularJs $http and file:// confusion

已经发布在这里,没有运气:https://forum.ionicframework.com/t/native-app-is-sending-header-origin-file-which-causes-problems/62388/1

编辑:发布时出现问题,如果我运行离子启动器(标签)模板,只有$http.post('http://myapp.com/apiv1/device')添加到控制器。

3 个答案:

答案 0 :(得分:1)

似乎问题来自服务器(特别是来自Tomcat)。

根据这个错误:

https://bz.apache.org/bugzilla/show_bug.cgi?id=60008

Tomcat提供的默认CORS过滤器(instances / shared / conf / web.xml)不允许POST请求并返回403。 问题是从Tomcat 8.0.37版本解决的,因此升级服务器应该可以解决您的问题。

问候。

答案 1 :(得分:1)

我上周遇到了这个问题。我不得不向JIRA api发出POST请求,但我无法更改服务器配置。 可能最简单的方法是制作自己的发送POST请求的android插件。如果你从插件发送POST请求,没有Origin:file:// header,一切正常。该插件就像2-3个小时的工作。

答案 2 :(得分:1)

尝试将以下内容添加到您允许的原始请求中:"file://* filesystem: "

我在Ionic中遇到<iframes>同样的问题,我修复了它:

Header set Content-Security-Policy "...; frame-ancestors 'self' file://* file://*/* filesystem: http://localhost:*;"