NSURLErrorDomain Código=-1004 para pocos segundos después de la aplicación de inicio

Me estoy poniendo «NSURLErrorDomain Código=-1004» error con Alamofire llamadas a la API,
pero sólo por unos pocos segundos después de la aplicación se inició (o tomó un descanso por unos minutos, mientras la aplicación se abre y realizar una llamada después de que)

Si intento hacer la misma llamada después de unos segundos, todo funciona bien.
He buscado en todo el Desbordamiento de la Pila de preguntas y comprobar todas las posibles causas a continuación:

  1. Ningún problema con la conexión a Internet
  2. «De la aplicación de Transporte de la Configuración de Seguridad» son correctas y el servidor del uso de https (también he probado la «NSAllowsArbitraryLoads=true», pero que no ayuda)
  3. Api trabajando bien

Mi sensación es que la configuración de la red tarda unos segundos y cuando hago una llamada a la API antes de que se hace, sólo falla inmediatamente. O.. estoy usando un Websocket en el fondo que podría estar relacionado?

ERROR: Error de Dominio=NSURLErrorDomain Código=-1004 «no se Pudo conectar con el servidor». UserInfo={NSUnderlyingError=0x137d39380 {Error de Dominio=kCFErrorDomainCFNetwork Código=-1004 «(null)» UserInfo={NSErrorPeerAddressKey={longitud = 16, capacidad = 16 bytes = 0x100201bb341a9f540000000000000000}, _kCFStreamErrorCodeKey=-2200, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=[FILTRADO], NSErrorFailingURLKey=[FILTRADO], _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2200, NSLocalizedDescription=no se Pudo conectar con el servidor.}

Alguna sugerencia?

ACTUALIZADO

Encontrado que la aplicación hace 4 solicitudes en el lanzamiento, y 1 o 2 de ellos al azar falla, y he comprobado Nginx acceso y registro de errores y no hay ningún registro para el error de llamadas a todas.

  • Estoy teniendo este problema exacto como estoy actualizando mi red de bibliotecas de AFNetworking 2.x 3.x. Por favor, hágamelo saber si usted ha dado con una solución para el problema. Hasta el momento me han confirmado también que la negociación ssl está teniendo lugar en el que indica que «no se pudo conectar al servidor» no es la causa real. También he probado a desactivar ATS y certificado de fijación. Todo comienza a trabajar después de un minuto o 2, pero la primera de varias solicitudes de fallar.
  • Alguien ha descubierto qué hay de malo en la final? Yo tengo el mismo problema… 🙁
  • ¿qué versión de nginx está en ejecución? Tenemos el mismo problema aquí con nginx, 1.10, iOS 9.3.1 el uso de HTTP/2 con TLS 1.2. El problema desaparece con HTTP/1.1. Podemos ver en Wireshark que la aplicación sólo se conecta una vez, lo cual es correcto, sin embargo, la primera solicitud de falla.
  • estás totalmente en lo correcto… tengo el mismo problema, la descalificación ahora todos mis servidores nginx 1.9.14
  • No tengo acceso a mi servidor, pero he resuelto con un delay (100-200 ms) para la petición de llamada.
  • Cómo puedo solucionar este problema cuando no tengo acceso al servidor del medio ambiente? También veo HTTP/1.1 en el encabezado de respuesta, pero sigue recibiendo el -1004 error

6 Kommentare

  1. 17

    Tenemos el mismo problema aquí con Nginx 1.10.0 (y 1.9.15), iOS 9.3.1 el uso de HTTP/2 con TLS 1.2.

    El problema desaparece con HTTP/1.1 y está trabajando también con HTTP/2 en Nginx versión hasta 1.9.14.

    • Yo estoy usando el nginx/1.9.12 sobre la producción y el nginx/1.9.15 en la puesta en escena. Puedo confirmar que lo que están diciendo, ¿tiene usted alguna idea de por qué está sucediendo? Has abierto un tema para nginx?
    • Sí, es marcado como un duplicado de este tema: trac.nginx.org/nginx/ticket/959
    • Oh, muchas gracias por esta información! He pasado 2 días para encontrar la solución. He probado muchas App de Transporte de la configuración de Seguridad, http libs y otros.
  2. 6

    Nginx 1.11.0 Principal está ahora disponible con el fix incluido mencionado anteriormente en este tema;

    Cambio: HTTP/2 clientes ahora pueden empezar a enviar la solicitud de cuerpo
    de inmediato, el «http2_body_preread_size» directiva controla el tamaño de
    el tampón utilizado antes de que nginx comenzar la lectura de la solicitud del cliente cuerpo.

    He probado y para mí esta versión ahora funciona de nuevo correctamente.

  3. 3

    Esto parece un error confirmado en nginx 1.10. Un tema sobre el que se pueden encontrar en el bug tracker de nginx en https://trac.nginx.org/nginx/ticket/979. El problema real se puede encontrar en la https://trac.nginx.org/nginx/ticket/959

    Usted puede ser que desee considerar el cambio a la 1.9 rama que se ha lanzamientos que hacen el trabajo. Esperemos que nginx la liberación de una versión 1.10.1 pronto que no tiene este error.

    El problema en realidad sólo se produce en iOS; Android, Windows y OSX sí parecen no tener problemas en la negociación de una válida http2 conexión.

    • Hay alguna solución para este problema? O debo volver a nginx 1.9.14?
    • Volver de nuevo, sería de ayuda. Sin embargo, esta no es la rama estable. Volver de nuevo a 1.8.1 le daría spdy de acceso de nuevo. Apple hizo marcar el error, como es confirmado por ahora, aunque
  4. 2

    También puedo confirmar que el nginx 1.9.15 no funciona correctamente. Algunas de las llamadas que siempre tengo «no se Pudo conectar con el servidor», y después de volver a nginx 1.9.12 todo funciona bien.

    • tengo el mismo problema en 1.9.15 demasiado
  5. 1

    Estos son los pasos que iba a tratar de seguir:

    • 1) probar mi aplicación en el simulador y en el dispositivo de
    • 2) mira si https es realmente necesario en lugar de http
    • 3) configurar un alamofire administrador y cambiar el tiempo de espera (para este paso me
      escribir algo de código):

      var alamofireManager = Alamofire.Manager.sharedInstance    
      let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
      configuration.HTTPMaximumConnectionsPerHost = 10
      configuration.timeoutIntervalForRequest = 30
      configuration.timeoutIntervalForResource =  30
      alamofireManager.delegate.taskWillPerformHTTPRedirection = nil

    (así, con este último paso, el siguiente alamofire llamadas pueden ser por ejemplo: alamofireManager.request(etc....)

    • 4) prueba con un enlace duro como http://www.google.com, si la misma cosa
      no pasó nada alrededor de su código swift son incorrectos, intentar
      configurar tu servidor web parámetros..
    • 1. Prueba en simulador y pocos dispositivos, y los resultados son los mismos
    • 2. https es realmente necesario, 3. Trató de que no se fije
    • 4. Probé con un enlace duro «google.com» y no sucedió. Tal vez hay algunos problemas con Nginx o el servidor de la web. Voy a echar un vistazo. Gracias por su respuesta
  6. 0

    Problema resuelto!!!

    versiones:

    1. Nginx version: 1.10.2
    2. IOS version: 9.3.2

    Cuando la config como este:

    listen 443 ssl; 

    Tengo el mismo problema como usted.

    Pero !!!

    Cuando la config como este:

    listen 443 ssl http2;

    Problema resuelto!!

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea