iPhone Simulator中的Ionic 3 CORS问题

Let*_*oll 3 cors cordova-plugins ionic3

我得到了我认为是iPhone Simulator版本SimulatorApp-829.6 / xCode 9.0中的CORS问题

我构建了带有Cordova的ionic3应用,并可以使用代理在浏览器中运行它。但是当我在SIM卡或手机上运行它时,它不会针对远程http呼叫进行身份验证。

因此,我添加了Cordova调试器并调试到xCode控制台:

这是http错误对象:

{“ _body”:{“ isTrusted”:true},“ status”:0,“ ok”:false,“ statusText”:“”,“ headers”:{},“ type”:3,“ url”:null }

这是我在Ionic应用程序中执行的代码(可在浏览器中使用)

    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    headers.append('Authorization', 'Basic ' + this.base64Service.encode(id + ':' + pw));
    headers.append('Access-Control-Allow-Origin', '*');
    

    return this.http.get('http://myserver.com/api/v1/authenticate', {headers: headers}).map(res => res.json());
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,因为有两件事:

1)我已经安装了Cordova白名单插件,并且在针对远程服务器之前取得了成功。不知道发生了什么

2)如果我使用Safari Developer> Simulator并连接到在模拟器中运行的应用程序,则会出现此错误:

Failed to load resource: Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load http://myserver.com/api/v1/authenticate. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

如何在Sim或实际设备中获得CORS问题?我认为资源都是基于file://的。另外,为什么Cordova白名单插件不能解决此问题?

提前致谢。在这个上花了很多时间。

emr*_*sel 5

我最近遇到了类似的问题。我的离子应用程序运行了几个月都没有问题,突然间我开始在iOS上收到CORS错误。

问题是我转而使用WKWebViewfrom UIWebview

这篇博客文章更多地解释了WKWebView为什么它比以前更好。

它还提到了有关CORS的问题:

UIWebview或iOS中较旧的Webview从未实际执行CORS,但WKWebView确实提供了并且不提供禁用它的方法。为了解决这个问题,您需要正确地实现CORS并添加以下条目:

来源:http:// localhost:8080

如果这是不可能的(您不拥有API),则一种解决方法是使用本机HTTP插件@ ionic-native / http。

因此,两种解决方案是:

  1. 如果您拥有要使用的API,请在其上启用CORS
  2. 如果您无法修改api,则可以使用Ionic Native Http

我选择了第一个,一切又重新开始正常工作。