[http] HTTP 상태 코드 0-오류 도메인 = NSURLErrorDomain?

iOS 프로젝트에서 일하고 있습니다.

이 응용 프로그램에서는 서버에서 이미지를 다운로드하고 있습니다.

문제:

이미지를 다운로드하는 동안 Request Timeout이 발생 합니다. 문서에 따르면 요청 시간 초과의 HTTP 상태 코드는 408입니다.

하지만 내 응용 프로그램 0에서 다음 오류와 함께 HTTP 상태 코드 가 나타납니다.

오류 도메인 = NSURLErrorDomain 코드 = -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 상태 코드 0에 대한 정보를 찾지 못했습니다.

누구든지 나에게 이것을 설명 할 수 있습니까?



답변

HTTP 상태 코드 0은 없습니다. 표시되는 것은 사용중인 API / 라이브러리에서 반환 한 0입니다. 이에 대한 문서를 확인해야합니다.


답변

NSHTTPURLResponse객체 의 상태 코드 0은 일반적으로 응답이 없음을 의미하며 다양한 이유로 발생할 수 있습니다. 서버는 유효한 HTTP 상태 코드가 아니므로 0 상태를 반환하지 않습니다.

귀하의 경우에는, 당신은되어 나타나는 요청이 시간 초과되고 0이 속성의 기본값이기 때문에 상태 코드 0을 얻는 . 시간 초과 자체는 서버가 제 시간에 응답하지 않거나 방화벽에 의해 차단되거나 전체 네트워크 연결이 중단되는 등 다양한 이유로 발생할 수 있습니다. 일반적으로 후자의 경우 전화가 네트워크에 연결되어 있지 않다는 것을 알만큼 스마트하지만 즉시 실패합니다. 그러나 명백한 상태 코드 0으로 여전히 실패합니다.

상태 코드가 0 인 경우, 실제 오류가 반환에 캡처되어 있습니다 NSError, 객체가 아니라 NSHTTPURLResponse.

408내 경험상 HTTP 상태 는 매우 드물다. 나는 한 번도 만난 적이 없습니다. 그러나 이것은 클라이언트가 서버에 대한 활성 소켓 연결을 유지해야하고 서버가 클라이언트에서 열린 소켓을 통해 더 많은 데이터를 전송하기를 기다리고 있지만 주어진 시간과 서버는 408상태 코드로 연결을 종료하고 기본적으로 클라이언트에게 “너무 오래 걸렸습니다”라고 알립니다.


답변

응답이 비어 있습니다. 대부분의 경우 코드는 1xx, 2xx, 3xx, 4xx, 5xx로 통계됩니다.

HTTP 상태 코드 목록


답변

iOS SDK에서 API 호출 시간이 초과되면 상태 0이 표시됩니다.


답변

내 제한된 경험으로 볼 때 다음 두 가지 시나리오가 응답을 유발할 수 있다고 말하고 싶습니다 status code: 0. 더 많을 수도 있지만 저는 그 두 가지를 알고 있습니다.

  • 연결이 느리게 응답 할 수 있습니다.
  • 또는 백엔드 서버를 사용할 수 없습니다.

문제는 status: 0약간 일반적이며 빈 응답 본문을 트리거하는 더 많은 사용 사례가 될 수 있습니다.


답변

상태 코드 ‘0’은 다음 가지 이유로
발생할 수 있습니다.
1) 클라이언트 가 서버에 연결할 수 없습니다.

2) 클라이언트 제한 시간 내에
응답을받을 수 없습니다.
3) 클라이언트 요청을 “중지 (중단)” 했습니다.

하지만이 세 가지 이유는 표준화되지 않았습니다.


답변

HTTP 응답 0은 표준 HTTP 응답이 아닙니다. 그러나 클라이언트가 서버에 연결할 수 없어 시간 초과가 발생했음을 나타냅니다.