¿Qué significa el código de estado HTTP 0?

Estoy trabajando en el proyecto de iOS.

En esta aplicación, estoy descargando imágenes del servidor.

Problema:

Al descargar imágenes, obtengo el tiempo de espera de solicitud . Según la documentación, el código de estado HTTP del tiempo de espera de la solicitud es 408 .

Pero en mi aplicación obtengo el código de estado HTTP 0 con el siguiente error

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0xb9af710 {NSErrorFailingURLStringKey=http://sofes.miximages.com/http/1383906967_5621_63.jpg, NSErrorFailingURLKey=http://sofes.miximages.com/http/1383906967_5621_63.jpg, NSLocalizedDescription=The request timed out., NSUnderlyingError=0x13846870 "The request timed out."}

Durante la búsqueda en Internet no encontré información sobre el código de estado HTTP 0.

¿Puede alguien explicarme esto?

No hay un código de estado HTTP 0. Lo que ve es un 0 devuelto por la API / biblioteca que está utilizando. Deberá verificar la documentación para eso.

Un código de estado de 0 en un objeto NSHTTPURLResponse generalmente significa que no hubo respuesta, y puede ocurrir por varias razones. El servidor nunca devolverá un estado de 0 ya que este no es un código de estado HTTP válido.

En su caso, parece que obtiene un código de estado de 0 porque la solicitud se agota y 0 es simplemente el valor predeterminado de la propiedad. El tiempo de espera en sí mismo podría ser por varias razones, como que el servidor simplemente no responde a tiempo, que está bloqueado por un firewall o que su conexión de red está inactiva. Por lo general, en el caso de este último, aunque el teléfono es lo suficientemente inteligente como para saber que no tiene una conexión de red y fallará de inmediato. Sin embargo, seguirá fallando con un código de estado aparente de 0.

Tenga en cuenta que en los casos en que el código de estado es 0, el error real se captura en el objeto NSError devuelto, no en el NSHTTPURLResponse .

El estado HTTP 408 es bastante raro en mi experiencia. Nunca me he encontrado uno. Pero aparentemente se usa en casos donde el cliente necesita mantener una conexión de socket activa al servidor, y el servidor está esperando que el cliente envíe más datos a través del socket abierto, pero no lo hace en un período de tiempo determinado y el servidor finaliza la conexión con un código de estado 408 , básicamente diciéndole al cliente “tardó demasiado”.

La respuesta fue vacía. La mayoría de los casos, los códigos tendrán estadísticas con 1xx, 2xx, 3xx, 4xx, 5xx.

Lista de códigos de estado HTTP

En SDK de iOS Cuando se agota el tiempo de espera de llamadas de API, obtiene el estado 0 para eso.

Desde mi experiencia limitada, diría que los siguientes dos escenarios podrían causar el status code: 0 respuesta status code: 0 , tener en cuenta; podrían ser más, pero sé de esos dos:

  • su conexión tal vez responda lentamente.
  • o tal vez el servidor de fondo no está disponible.

lo que pasa es que el status: 0 es ligeramente genérico, y podrían ser más casos de uso que activen un cuerpo de respuesta vacío.

Tenemos el error:

GET http: //localhost/pathToWebSite/somePage.aspx provocó un error http.status: 0

Esa llamada se realiza desde la tarea de Windows que llama a un archivo VBS, por lo que para solucionar el problema, apuntó un navegador a la url y obtenemos un Error de privacidad:

Tu conexión no es privada

Los atacantes pueden estar intentando robar tu información de localhost (por ejemplo, contraseñas, mensajes o tarjetas de crédito). NET :: ERR_CERT_COMMON_NAME_INVALID

Informe automáticamente los detalles de posibles incidentes de seguridad a Google. Política de privacidad Volver a la seguridad Este servidor no pudo probar que es localhost; su certificado de seguridad es de * .ourdomain.com. Esto puede ser causado por una configuración incorrecta o por un atacante que intercepta su conexión. Aprende más.

Esto se debe a que tenemos una regla de reescritura de URL de IIS para forzar el uso de https. Esa regla desvía http: // localhost a https: // localhost pero nuestro certificado SSL se basa en un nombre de dominio externo no localhost, por lo tanto, el error que se informa es el código de estado 0. Por lo tanto, un error de privacidad podría ser una razón muy poco clara para este código de estado 0.

En nuestro caso, la solución fue agregar una excepción a la regla para localhost y permitir http: //localhost/pathToWebSite/somePage.aspx para usar http. Oscuro, sí, pero me encontraré con el próximo año y ahora encontraré mi respuesta en una búsqueda en Google.

La respuesta HTTP 0 no es una respuesta HTTP estándar. Pero indica que el cliente no pudo conectarse con el servidor y, por lo tanto, el tiempo de espera pasó.

Tengo un script java ajax client & nodejs express servidor de aplicaciones

El código del cliente se ve así:

 ... var status1 = xmlHttpRequest.status; ... 

El código del servidor se ve así:

 ... // An exception here results HTTP status codes in status1 (at client side above) ... ... var reqDb = http.request(options, requestCompleteCallback); ... ... function requestCompleteCallback(response) { ... // An exception here results in 0 in status1 (at client side above) ... } 

30 minutos de lucha para resolver esto.
Espero que esta publicación ayude a alguien.

La mejor de las suertes.

En el tiempo de espera de la puerta de enlace, el estado será cero en su llamada de error.

 .error( function( data,status,headers,config){ console.log(status) } 

Códigos de estado HTTP

CORS en mi caso.

Tuve tal respuesta en una aplicación de iOS una vez. La solución era la falta de Access-Control-Allow-Origin: * en los encabezados.

Más: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin