Код состояния HTTP 0 - Ошибка домена = NSURLErrorDomain?

Я работаю над проектом iOS.

В этом приложении я загружаю изображения с сервера.

Проблема:

При загрузке изображений я получаюТайм-аут запроса, Согласно документации HTTP-код состояния тайм-аута запроса.408

Но в моем приложении я получаю код состояния HTTP0 со следующей ошибкой

Ошибка домена = NSURLErrorDomain Code = -1001 "Время запроса истекло. " UserInfo = 0xb9af710 {NSErrorFailingURLStringKey =http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg, NSErrorFailingURLKey =http://xxxx.com/resources/p/PNG/1383906967_5621_63.jpg, NSLocalizedDescription = Тайм-аут запроса. NSUnderlyingError = 0x13846870 "Время запроса истекло. "}

Во время поиска по интернету я не нашел информации о HTTP Status Code 0.

Кто-нибудь может мне это объяснить?

 devasghar01 дек. 2016 г., 14:00
Может также произойти из-заСмешанный контент developer.mozilla.org/en-US/docs/Web/Security/Mixed_content

Ответы на вопрос(12)

то, что клиент не смог подключиться к серверу и, следовательно, произошел тайм-аут.

 VDN08 нояб. 2013 г., 12:49
Проверьте эту ссылкуstackoverflow.com/q/872206/2968738
 Irfan DANISH08 нояб. 2013 г., 12:47
В предоставленной вами ссылке нет информации о HTTP Status Code 0.

У меня был такой ответ в приложении для iOS один раз. Решение было отсутствующимAccess-Control-Allow-Origin: * в заголовках.

Больше:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

Код клиента выглядит так:

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

Код сервера выглядит так:

...
// 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 минут борьбы, чтобы понять это.

Надеюсь, этот пост поможет кому-то.

Удачи.

три причины

1) Клиентне может подключиться к серверу

2) Клиентне могу получить ответ в течение периода ожидания

3) Запрос был "остановлен (прерванный)» клиентом.

Но эти три причины не стандартизированы

 Hariprasath Yadav25 янв. 2019 г., 06:32
любой исходный код применим для проверки первых двух пунктов, вам просто нужен запрос на основе ajax. но третье происходит при отмене пользовательского запроса, это можно сделать с помощью функции abort в jquery.
 rgoliveira22 янв. 2019 г., 18:54
У вас есть источник по этому поводу?

я бы сказал, что следующие два сценария могут вызвать реакциюstatus code: 0, иметь ввиду; их может быть больше, но я знаю о тех двух:

Ваше соединение может реагировать медленно.или, может быть, внутренний сервер недоступен.

Дело в том,status: 0 является немного общим, и их может быть больше вариантов использования, которые вызывают пустое тело ответа.

 user20742113 авг. 2015 г., 03:01
Это'статус API, а не статус HTTP. Если не было ответа HTTP, в нем не было кода состояния HTTP.
 Simple-Solution13 авг. 2015 г., 13:51
Спасибо за исправление, я хотел сказать ответ!
 Ravi17 июн. 2016 г., 08:03
Код состояния 0 не означает, что существует код ответа HTTP, но это может быть проблемой, если ваш сервер недоступен.
Решение Вопроса

что вы видите - это 0, возвращаемое API / библиотекой, которую вы используете. Вам придется проверить документацию для этого.

 Prashobh15 мар. 2017 г., 11:48
Тайм-аут выхода из шлюза получит 0 статуса при возврате ошибки http,angulartutorial.net/2017/03/http-status-codes-and-meanings.html
 Gaui24 янв. 2015 г., 01:56
IE10 имеет странную ошибку, при получении кода состояния 401 или 403 он интерпретирует его как код состояния 0. В моей голове, код состояния 0 является ошибкой, потому что явно что-то не так.

ПОЛУЧИТЬHttp: //localhost/pathToWebSite/somePage.aspx поднял http.status: 0 ошибка

Этот вызов сделан из задачи Windows, которая вызывает файл VBS, поэтому, чтобы устранить проблему, указал браузер на URL-адрес, и мы получили ошибку конфиденциальности:

Ваше соединение не является частным

Злоумышленники могут пытаться украсть вашу информацию с локального хоста (например, пароли, сообщения или кредитные карты). NET :: ERR_CERT_COMMON_NAME_INVALID

Автоматически сообщать подробности о возможных инцидентах безопасности в Google. Политика конфиденциальности Вернуться к безопасности Этот сервер не может доказать, что это localhost; его сертификат безопасности от * .ourdomain.com. Это может быть вызвано неверной конфигурацией или злоумышленником, перехватывающим ваше соединение. Учить больше.

Это связано с тем, что у нас установлено правило перезаписи URL IIS для принудительного использования подключений https. Это правило отвлекаетHTTP: // локальный вhttps: // локальный но наш SSL-сертификат основан на внешнем доменном имени, а не localhost, поэтому ошибка, сообщаемая как код состояния 0. Таким образом, ошибка конфиденциальности может быть очень неясной причиной для этого кода состояния 0.

В нашем случае решением было добавить исключение в правило для localhost и разрешитьHttp: //localhost/pathToWebSite/somePage.aspx использовать http. Неясный, да, но яЯ столкнусь с этим в следующем году, и теперь яЯ найду мой ответ в поиске Google.

ус 0 для этого.

вашем обратном вызове.

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

HTTP коды состояния

ct, который имеет статус 0, даже если вы видите состояние ошибки 404, 401, 500 и т. Д. В сети.

Это может произойти, если ваше приложение и API находятся в разных доменах - применяется механизм CORS. Согласно CORS для каждого запроса API браузер отправляет два запроса:

запрос preflight OPTIONS, чтобы понять, разрешает ли API запрос Actual / Origin.когда API позволяет (запрос OPTIOS отвечает с состоянием 204 и правильными заголовками Access-Control-Allow-Origin) - браузер отправляет следующий "Актуальный / Происхождение запроса ".

В приложении мы обрабатываем сообщение об ошибке для "Актуальный / Происхождение запроса ", и если "предполетный запрос опций " не удалось - браузер недать правильный объект HttpError для обработчика ошибок http. Таким образом, чтобы получить правильный статус ответа http - обязательно получите предварительный запрос ответа OPTIONS.

NSHTTPURLResponse Объект обычно означает, что ответа не было, и может возникнуть по разным причинам. Сервер никогда не вернет статус 0, поскольку это недопустимый код состояния HTTP.

В вашем случае выпоявляясь чтобы получить код состояния 0, потому что время запроса истекло, а 0 является значением по умолчанию для свойства. Сам тайм-аут может быть вызван различными причинами, например, сервер просто не отвечает вовремя, блокируется брандмауэром или отключается все ваше сетевое соединение. Обычно в последнем случае телефон достаточно умен, чтобы понять, чтоу него нет сетевого подключения, и он сразу же потерпит неудачу. Тем не менее, он все равно не будет работать с очевидным кодом состояния 0.

Обратите внимание, что в случаях, когда код состояния равен 0, в возвращаемом виде фиксируется реальная ошибка.NSError объект, а не.NSHTTPURLResponse

Статус HTTP408 довольно редко в моем опыте. Я'никогда не встречал Но он, очевидно, используется в тех случаях, когда клиенту необходимо поддерживать активное соединение сокета с сервером, и сервер ожидает от клиента отправки дополнительных данных через открытый сокет, но это не так.т в заданный промежуток времени, и сервер завершает соединение с408 код состояния, по сути говоря клиентуты слишком долго "

Ваш ответ на вопрос