我已经开始在Ionic 1中构建简单的Todo应用程序,我发现了Origin标题的问题。 (CORS相关)
如果我跑
ionic serve
在浏览器中一切正常,我可以在apache(tomcat)上向我的REST API发出请求。但是当我为Android甚至离子查看器构建我的应用程序时,所有请求都会失败。使用chrome调试器我设法找到了问题。
原生app发送标题(仅在android上测试)
Origin: file://
导致我的服务器拒绝请求。在我看来它应该与主机发送正确的Origin标头。下面附有更多详细信息的屏幕截图。
我该怎么办?
在此处找到相关主题: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')
添加到控制器。
答案 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:*;"