2017-10-14 3 views
1

Ich erhalte, was ich glaube, ein CORS Thema in der iPhone Simulator Version SimulatorApp-829,6/xCode 9.0Ionic 3 CORS Problem in iPhone Simulator

I w/Cordova eine ionic3 App gebaut werden und es in der laufen kann Browser mit einem Proxy. Aber wenn ich es in der Sim oder auf meinem Telefon ausgeführt habe, wird es sich nicht gegen den entfernten http-Anruf authentifizieren.

So habe ich Cordova Debugger und an der xCode Konsole debuggt:

Dies ist das http-Fehlerobjekt:

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

Dies ist der Code, den ich in der ionischen app bin Ausführung (Werke in Browser)

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());

Ich bin wirklich verwirrt, weil zwei Dinge:

1) Ich habe die weiße Liste Cordova Plugin installiert und haben Erfolg gehabt, bevor gegen den Remote-Server. Nicht sicher, was auf

los ist

2) Wenn ich Safari Entwickler> Simulator verwenden und an die App einer Verbindung im Simulator laufen gibt es diesen Fehler:

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. 

Wie kann man ein CORS Problem in der Sim bekommen oder tatsächliches Gerät? Ich denke, die Ressourcen waren alle Datei: // basiert. Warum sollte sich das Cordova Whitelist-Plugin nicht um das Problem kümmern?

Vielen Dank im Voraus. Habe viele Stunden damit verbracht.

Antwort

0

Ich stieß vor kurzem auf ein ähnliches Problem. Meine ionische App lief monatelang ohne Probleme und ich erhielt plötzlich CORS-Fehler auf iOS.

Das Problem war, dass ich auf WKWebView von UIWebview wechselte.

This blog post erklärt mehr über WKWebView und warum es viel besser als sein Vorgänger ist.

Er erwähnt auch dieses über CORS:

UIWebview, or the older webview in iOS, never actually enforced CORS, but WKWebView does and does not provide a way to disable it. To address this, you need to implement CORS correctly and add the following entry:

Origin: http://localhost:8080

IF this is not possible (you do not own the API), a workaround can be to use the native HTTP plugin, @ionic-native/http.

So sind die beiden Lösungen sind:

  1. Wenn Sie die api besitzen Sie verwenden, aktivieren Sie CORS auf es
  2. Wenn Sie können‘ t Ändern Sie die API, können Sie Ionic Native Http

Ich ging mit der ersten und e Alles hat wieder richtig funktioniert.