Ionic - $http 在移动设备中工作,但在浏览器中显示 CORS 和预检错误

Posted

技术标签:

【中文标题】Ionic - $http 在移动设备中工作,但在浏览器中显示 CORS 和预检错误【英文标题】:Ionic - $http works in mobile device but in browser it shows CORS and preflight error 【发布时间】:2017-03-05 18:56:52 【问题描述】:

我正在使用 Ionic 框架开发移动应用程序。我使用 $http(带有自定义标头的 POST)和当我尝试时

离子服务

在浏览器(chrome、firefox、...)中,我得到了

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 405。

错误。如果我在 chrome 中启用 CORS 插件并尝试相同,我会得到

预检响应包含无效的 HTTP 状态代码 405

错误。

但是当我使用它在我的手机(android/ios)中安装它时一切正常

离子运行安卓

离子运行 ios

是什么让我的浏览器限制了 $http 以及为什么我的手机允许它。? Webview和浏览器有区别吗?

信息: - 我正在使用(默认)cordova 插件 - 控制台、设备、闪屏、状态栏、白名单、键盘

请帮帮我。没有正确的理解,我不能简单地构建移动应用程序。提前致谢。

编辑 1

我正在使用 REST API 来处理自定义 Header 请求。到目前为止,我不允许修改 API 代码,因为它在原生 android 应用程序上运行良好很长时间。问题是当我使用 Ionic 时,令我惊讶的是它可以在我的三星 Tab 和 iPad 上运行(当我在没有 livereload 模式的情况下运行时)。

我只想知道,是什么导致我的浏览器受限而我的移动设备工作?

移动设备中的WebView不是有浏览器中的安全策略吗?

【问题讨论】:

你看过这个***.com/questions/33660712/… 【参考方案1】:

为什么我的移动应用可以正常运行,但不能在浏览器中运行?

我在 Ionic 项目中使用了 cordova-plugin-whitelist。它实现了用于导航应用程序 web 视图的白名单策略。 check source

要使浏览器正常工作,请在我的 ionic.config.json 中定义代理。但这只是一种解决方法。对于生产,我们应该让服务器明确允许其将 API 调用列入白名单。 check source

【讨论】:

【参考方案2】:

@Naveen - Ionic 写了一篇关于浏览器和应用内处理 http 源头的区别的博客论文:http://blog.ionicframework.com/handling-cors-issues-in-ionic

【讨论】:

感谢您的贡献。 :)

以上是关于Ionic - $http 在移动设备中工作,但在浏览器中显示 CORS 和预检错误的主要内容,如果未能解决你的问题,请参考以下文章

谷歌标签管理器无法在 Ionic+Angular 应用程序中工作

与 Host App 的自定义键盘扩展通信在设备中不工作但在模拟器中工作

MPMoviePlayer 声音在模拟器和 ipad 设备中工作,但在 iPhone 设备中不工作

UIBlurEffect 在设备上不模糊但在模拟器中工作

无法使用诺基亚手机拍摄图像,但在计算机应用程序中工作正常?

后台获取在模拟器中工作但在真实设备中不工作