ios - que - NSURLErrorDomain Code=-1004 durante unos segundos después de iniciar la aplicación
aplicaciones que dañan el celular (6)
¡¡¡Problema resuelto!!!
versiones:
1. Nginx version: 1.10.2
2. IOS version: 9.3.2
Cuando la configuración de esta manera:
listen 443 ssl;
Ten el mismo problema que tú.
Pero !!!
Cuando la configuración de esta manera:
listen 443 ssl http2;
¡¡Problema resuelto!!
Recibo el error "NSURLErrorDomain Code = -1004" con las llamadas a la API de Alamofire, pero solo unos segundos después de que se inició la aplicación (o tomó un descanso por unos minutos mientras la aplicación se abre y luego hago una llamada)
Si trato de hacer la misma llamada después de unos segundos, todo funciona bien. Busqué en todas las preguntas de desbordamiento de pila y comprobé todas las causas posibles a continuación:
- No hay problema con la conexión a internet.
- La "configuración de seguridad del transporte de la aplicación" es correcta y el servidor usa https (también probé "NSAllowsArbitraryLoads = true", pero eso no ayudó)
- APIs funcionando bien
Mi intuición es que obtener la configuración de la red demora unos segundos y cuando hago una llamada a la API antes de hacerlo, simplemente falla de inmediato. O ... estoy usando un Websocket en segundo plano que podría estar relacionado?
FALLO: Error de dominio = NSURLErrorDomain Code = -1004 "No se pudo conectar con el servidor." UserInfo = {NSUnderlyingError = 0x137d39380 {011] 064139 (Código de código de la fuente de la información) [0136] [013]. NSErrorFailingURLStringKey = [FILTERED], NSErrorFailingURLKey = [FILTERED], _kCFStreamErrorDomainKey = 4, _kCFStreamErrorCodeKey = -2200, NSLocalizedDescription = No se pudo conectar con el servidor.}
¿Alguna sugerencia?
ACTUALIZADO
Encontré que la aplicación realiza 4 solicitudes en el inicio, y 1 o 2 de ellas fallan aleatoriamente, y verifiqué el acceso y el registro de errores de Nginx y no hay ningún registro para las llamadas fallidas.
Esto parece ser un error confirmado en nginx 1.10. Puede encontrar un problema al respecto en el rastreador de errores de nginx en https://trac.nginx.org/nginx/ticket/979 . El problema real se puede encontrar en trac.nginx.org/nginx/ticket/959
Es posible que desee considerar cambiar a la rama 1.9 que tiene versiones que funcionan. Con suerte, nginx lanzará una versión 1.10.1 pronto que no tiene este error.
El problema en realidad solo ocurre en iOS; Android, Windows y OSX en sí parecen no tener problemas para negociar una conexión http2 válida.
Estos son los pasos que intentaría seguir:
- 1) prueba mi aplicación en el simulador y dispositivo
- 2) mira si https es realmente necesario en lugar de http
3) configure un administrador de alamofire y cambie el tiempo de espera (para este paso escribo un 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í que con este último paso, las siguientes llamadas a alamofire pueden ser, por ejemplo: alamofireManager.request(etc....
)
- 4) haga una prueba con un enlace fijo como http://www.google.com , si no sucedió lo mismo, su código Swift no es correcto, intente configurar los parámetros de su servidor web.
La línea principal de Nginx 1.11.0 ahora está disponible con la solución incluida mencionada anteriormente en este tema;
Cambio: los clientes HTTP / 2 ahora pueden comenzar a enviar el cuerpo de la solicitud inmediatamente; La directiva "http2_body_preread_size" controla el tamaño del búfer usado antes de que nginx comience a leer el cuerpo de la solicitud del cliente.
Lo probé y para mi esta versión ahora funciona correctamente de nuevo.
También puedo confirmar que el nginx 1.9.15 no funciona correctamente. Algunas llamadas siempre obtuvieron "No se pudo conectar con el servidor", y después de volver a nginx 1.9.12 todo funciona bien.
Tenemos el mismo problema aquí con Nginx 1.10.0 (y 1.9.15), iOS 9.3.1 usando HTTP / 2 con TLS 1.2.
El problema desaparece con HTTP / 1.1 y también funciona con HTTP / 2 en la versión Nginx hasta 1.9.14.