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
상태 코드로 연결을 종료하고 기본적으로 클라이언트에게 "너무 오래 걸렸습니다"라고 알립니다.
iOS SDK에서 API 호출 시간이 초과되면 상태 0이 표시됩니다.
응답이 비어 있습니다. 대부분의 경우 코드는 1xx, 2xx, 3xx, 4xx, 5xx로 통계됩니다.
내 제한된 경험에서 다음 두 시나리오가 응답을 유발할 수 있다고 말하고 싶습니다 status code: 0
. 더 많을 수도 있지만 저는 그 두 가지를 알고 있습니다.
- 연결이 느리게 응답 할 수 있습니다.
- 또는 백엔드 서버를 사용할 수 없습니다.
문제는 status: 0
약간 일반적이며 빈 응답 본문을 트리거하는 더 많은 사용 사례가 될 수 있습니다.
HTTP 응답 0은 표준 HTTP 응답이 아닙니다. 그러나 클라이언트가 서버에 연결할 수 없으므로 시간 초과가 발생했음을 나타냅니다.
오류가 발생했습니다.
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 : // localhost 를 https : // localhost로 전환 하지만 SSL 인증서는 localhost가 아닌 외부 도메인 이름을 기반으로하므로 상태 코드 0으로보고되는 오류입니다. 따라서 개인 정보 오류는 매우 모호한 이유가 될 수 있습니다. 이 상태 코드 0.
우리의 경우 해결책은 localhost에 대한 규칙에 예외를 추가하고 http : //localhost/pathToWebSite/somePage.aspx 가 http를 사용 하도록 허용 하는 것입니다. 모호하지만 예,하지만 내년에이 문제를 겪을 것이며 이제 Google 검색에서 내 대답을 찾을 수 있습니다.
제 경우에는 CORS입니다.
한 번 iOS 앱에서 그런 반응을 보였습니다. 해결책은 Access-Control-Allow-Origin: *
헤더에 누락되었습니다 .
더보기 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
Status code '0' can occur because of three reasons
1) The Client cannot connect to the server
2) The Client cannot receive the response within the timeout period
3) The Request was "stopped(aborted)" by the Client.
But these three reasons are not standardized
I have a java script ajax client & nodejs express application server
Client code looks like:
...
var status1 = xmlHttpRequest.status;
...
Server code looks like:
...
// 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 minutes of struggle to figure this out.
Hope this post helps someone.
Best of luck.
On gate way timeout, status will be zero on your error call back.
.error( function( data,status,headers,config){
console.log(status)
}
Sometimes Browser respond to http error handler with Error Object, that have status set to 0, even if you can see 404, 401, 500 etc. error status in network.
This could happen if your Application and API are on different domains - CORS mechanism is applied. According to CORS for each API request browser sends two requests:
- preflight OPTIONS request to understand if API allows Actual/Origin request.
- when API allows (OPTIOS request respond with status 204 and correct Access-Control-Allow-Origin headers) - browser send next "Actual/Origin request".
In Application we are handling Error response for "Actual/Origin request", and if "preflight OPTIONS request" failed - browser doesn't give correct HttpError object for http error handler. So to get correct status of http response - be sure to get success preflight OPTIONS request response.
참고URL : https://stackoverflow.com/questions/19858251/http-status-code-0-error-domain-nsurlerrordomain
'developer tip' 카테고리의 다른 글
라이브러리 경로의 기본 설정을 지정하는 방법은 무엇입니까? (0) | 2020.09.22 |
---|---|
iOS 장치 (모바일 Safari)의 입력 필드에서 프로그래밍 방식으로 텍스트 선택 (0) | 2020.09.21 |
Swift에서 Array [String] 슬라이싱 반환 유형이 [String]이 아닌 것 같습니다. (0) | 2020.09.21 |
주어진 시간에 ffmpeg가있는 비디오의 스크린 샷 1 개를 추출하는 방법은 무엇입니까? (0) | 2020.09.21 |
len ()과 .__ len __ ()의 차이점은 무엇입니까? (0) | 2020.09.21 |