Вопрос по http-status-codes, http, download, nserror – Код состояния HTTP 0 - Ошибка домена = NSURLErrorDomain?

79

Я работаю над проектом 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.

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

Может также произойти из-заСмешанный контент developer.mozilla.org/en-US/docs/Web/Security/Mixed_content devasghar

Ваш Ответ

12   ответов
2

ПОЛУЧИТЬ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

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.

75

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

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

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

0

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

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

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

Удачи.

5

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

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

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

Спасибо за исправление, я хотел сказать ответ! Simple-Solution
Это'статус API, а не статус HTTP. Если не было ответа HTTP, в нем не было кода состояния HTTP. user207421
Код состояния 0 не означает, что существует код ответа HTTP, но это может быть проблемой, если ваш сервер недоступен. Ravi
0

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

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

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

3

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

7
В предоставленной вами ссылке нет информации о HTTP Status Code 0. Irfan DANISH
Проверьте эту ссылкуstackoverflow.com/q/872206/2968738 VDN
1

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

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

60

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

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

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

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

1

три причины

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

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

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

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

У вас есть источник по этому поводу? rgoliveira
любой исходный код применим для проверки первых двух пунктов, вам просто нужен запрос на основе ajax. но третье происходит при отмене пользовательского запроса, это можно сделать с помощью функции abort в jquery. Hariprasath Yadav

Похожие вопросы