Ошибка Cordova iOS: Origin null не разрешен Access-Control-Allow-Origin

я обновил приложение Cordova iOS до последних версий:

iOS 4.1.0
Cordova  6.0.0

и я обновил плагины, а также добавил новый плагин Wkwebview Engine.

я добавил свою политику безопасности контента в индекс.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">

мой конфиг.xml всегда содержал:

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

но я добавил

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

для хорошей мерой.

Я контролирую веб-сервер, к которому приложение пытается подключиться, и я включил CORS на это:

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

сервер имеет действительный сертификат SSL, и все вызовы к нему https://.

мой plist в xCode имеет:

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

Я создаю и запускаю приложение непосредственно на устройстве и с помощью Safari Develop для просмотра ошибки.

у меня есть Android-версия этого приложения с собственным обновленным базовым кодом, который отлично работает.

мои дальнейшие исследования показали, что это новый плагин WKWebView двигатель, который вызывает проблему. Но единственные предложения, которые я нашел об этом, находятся в Ionic forums, и я не использую Ionic для этой сборки.

чтобы подтвердить, это сообщения об ошибках, которые я получаю от Safari в 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.

1 ответов


@jcesarmobile был прав. Просто добавив httpProtocol мой web.config не хватает. Мне также пришлось добавить следующий код 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