2016-03-15 13 views
6

mam ulepszony mój aplikację Cordova iOS do najnowszej wersji:Cordova iOS błąd: null Pochodzenie nie jest dozwolone przez Access-Control-Allow-Origin

iOS 4.1.0 
Cordova 6.0.0 

I Zaktualizowaliśmy wtyczek, a także dodany nową wtyczkę WKWebView Engine.

Dodałem moje Content-Security-Policy do pliku index.html:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' 'unsafe-inline' data:;connect-src 'self' https://mydomain/myservice/; plugin-types application/pdf"> 

Moje config.xml zawsze zawierał:

<content src="index.html" /> 
<access origin="*" /> 

ale dodałem

<access origin="*.mydomain.*" /> 

za dokładkę.

kontrolować serwer WWW aplikacja próbuje się połączyć, i mam włączone CORS na nim:

<httpProtocol> 
    <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
    </customHeaders> 
    </httpProtocol> 

Serwer posiada ważny certyfikat SSL i wszystkie połączenia do niej https: //.

Mam plist w Xcode posiada:

Allow Arbitrary Loads : Yes 
Exception Domains 
    [mydomain] 
     NSIncludesSubdomains : Yes 
     NSTemporaryExceptionAllowsInsecureHTTPLoads : YES 
     NSTemporaryExceptionMinimumTLSVersion : TLSv1.1 

buduję i uruchamianie aplikacji bezpośrednio na urządzenie i za pomocą Safari Develop, aby zobaczyć błędu.

Mam wersję Androida tej aplikacji z własnym zaktualizowanym kodem podstawowym, która działa poprawnie.

Moje dalsze badania wykazały, że przyczyną problemu jest nowa wtyczka WKWebView Engine. Ale jedyne sugestie, które znalazłem o tym są na forach jonowych, a ja nie używam jonowego dla tej wersji.

Wystarczy, aby potwierdzić, to są komunikaty o błędach Dostaję od Safari w debug:

[Error] Failed to load resource: the server responded with a status of 405 (Method Not Allowed) ([my thing], line 0) 
[Error] Failed to load resource: Origin null is not allowed by Access-Control-Allow-Origin. ([my thing], line 0) 
[Error] XMLHttpRequest cannot load https://[mydomain]/[my service]/[my thing]. Origin null is not allowed by Access-Control-Allow-Origin. 
+0

wydaje się, że CORS nie jest poprawnie ustawiony na serwerze. Czy twoja prośba ma nagłówki autoryzacji? – jcesarmobile

+0

Nie. Brakowało mi czegoś. Dodano to w odpowiedzi poniżej. – DaveSav

Odpowiedz

1

@jcesarmobile była prawidłowa. Po prostu dodanie httpProtocol do mojego web.config było niewystarczające. Musiałem również dodać następujący kod do global.asax Application_BeginRequest:

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*") 
    If HttpContext.Current.Request.HttpMethod.Equals("OPTIONS") Then 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE") 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept") 
     HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000") 
     HttpContext.Current.Response.End() 
    End If 
Powiązane problemy