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


94

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에 대한 정보를 찾지 못했습니다.

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



답변:


97

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


7
IE10에는 이상한 버그가 있습니다. 상태 코드 401 또는 403을 받으면 상태 코드 0으로 해석합니다. 제 머리 속에는 상태 코드 0이 오류입니다. 분명히 뭔가 잘못 되었기 때문입니다.
Gaui 2015 년

5
Gate way timeout은 http 오류 콜백에서 0 상태를 수신합니다. angulartutorial.net/2017/03/http-status-codes-and-meanings.html
Prashobh

대답은 틀 렸습니다. 브라우저가 서버에 연결할 수없는 경우 상태 코드 0이 존재합니다. 예를 들어 504와 같은 다른 오류가 발생하면 이는 역방향 프록시 설정으로 인해 발생합니다.
Nickon

정답입니다. HTTP 상태 코드 0이 없습니다. API의 반환 값으로 볼 수 있지만 HTTP 응답 메시지 내에서는 발생하지 않습니다.
Julian Reschke

75

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

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

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

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


1
완벽한 설명.
CouchDeveloper



5

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

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

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


HTTP 상태가 아니라 API 상태입니다. HTTP 응답이 없으면 HTTP 상태 코드가없는 것입니다.
Marquis of Lorne

상태 코드 0은 HTTP 응답 코드가 있음을 의미하지는 않지만 서버를 사용할 수없는 경우 문제 일 수 있습니다.
라비

5

상태 코드 '0'은 다음 가지 이유로 발생할 수 있습니다.
1) 클라이언트 가 서버에 연결할 수 없습니다.
2) 클라이언트 제한 시간 내에 응답을받을 수 없습니다.
3) 클라이언트 요청을 "중지 (중단)" 했습니다.

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


그것에 대한 출처가 있습니까?
rgoliveira

모든 소스 코드는 처음 두 지점을 테스트하는 데 적용 할 수 있으며, ajax 기반 요청 만 있으면됩니다. 그러나 세 번째는 사용자 요청을 취소 할 때 발생합니다. 이것은 jquery의 중단 기능으로 수행 할 수 있습니다.
Hariprasath Yadav

4

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


2

오류가 발생했습니다.

GET http : //localhost/pathToWebSite/somePage.aspx 에서 http.status : 0 오류가 발생했습니다.

이 호출은 VBS 파일을 호출하는 Windows 작업에서 이루어 지므로 문제를 해결하기 위해 브라우저에서 URL을 가리키면 개인 정보 오류가 발생합니다.

귀하의 연결은 비공개가 아닙니다

공격자는 로컬 호스트에서 사용자 정보 (예 : 암호, 메시지 또는 신용 카드)를 훔치려 고 할 수 있습니다. NET :: ERR_CERT_COMMON_NAME_INVALID

가능한 보안 사고에 대한 세부 정보를 Google에 자동으로보고합니다. 개인 정보 보호 정책 보안으로 돌아 가기이 서버는 로컬 호스트임을 증명할 수 없습니다. 보안 인증서는 * .ourdomain.com에서 가져 왔습니다. 이는 구성이 잘못되었거나 공격자가 연결을 가로 채서 발생할 수 있습니다. 더 알아보기.

이는 연결이 https를 사용하도록 강제하는 IIS URL 다시 쓰기 규칙이 있기 때문입니다. 이 규칙은 http : // localhosthttps : // localhost로 전환 하지만 SSL 인증서는 localhost가 아닌 외부 도메인 이름을 기반으로하므로 상태 코드 0으로보고되는 오류입니다. 따라서 개인 정보 오류는 매우 모호한 이유가 될 수 있습니다. 이 상태 코드 0.

우리의 경우 해결책은 localhost에 대한 규칙에 예외를 추가하고 http : //localhost/pathToWebSite/somePage.aspx 가 http를 사용 하도록 허용 하는 것입니다. 모호하지만 예,하지만 내년에이 문제를 겪을 것이며 이제 Google 검색에서 내 대답을 찾을 수 있습니다.


2

때때로 브라우저는 네트워크에서 404, 401, 500 등의 오류 상태를 볼 수 있더라도 상태가 0으로 설정된 오류 개체로 http 오류 처리기에 응답합니다.

이는 애플리케이션과 API가 서로 다른 도메인에있는 경우 발생할 수 있습니다. CORS 메커니즘이 적용됩니다. 각 API 요청에 대한 CORS에 따르면 브라우저는 두 가지 요청을 보냅니다.

  1. API가 Actual / Origin 요청을 허용하는지 이해하기위한 preflight OPTIONS 요청.
  2. API가 허용 할 때 (OPTIOS 요청이 상태 204로 응답하고 Access-Control-Allow-Origin 헤더를 수정 함)-브라우저가 다음 "실제 / 원본 요청"을 보냅니다.

응용 프로그램에서 "실제 / 원본 요청"에 대한 오류 응답을 처리하고 "프리 플라이트 OPTIONS 요청"이 실패한 경우 브라우저가 http 오류 처리기에 올바른 HttpError 개체를 제공하지 않습니다. 따라서 http 응답의 올바른 상태를 얻으려면 성공 프리 플라이트 OPTIONS 요청 응답을 받아야합니다.




당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.