3

apple's doc- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error은 오류 매개 변수를 통해서만 클라이언트 측 오류를보고합니다.NSURLSession에서 HTTP 오류를 처리하는 가장 좋은 방법은 무엇입니까?

참고 : NSURLSession은 error 매개 변수를 통해 서버 오류를보고하지 않습니다. 앱이 error 매개 변수를 통해받는 유일한 오류는 호스트 이름을 확인하거나 호스트에 연결할 수없는 등의 클라이언트 측 오류입니다. 오류 코드는 URL로드 시스템 오류 코드에 설명되어 있습니다. 서버 측 오류는 NSHTTPURLResponse 객체의 HTTP 상태 코드를 통해보고됩니다.

그러나 내가 NSURLSessionDataTask으로 iOS9에서 테스트 할 때 현재 애플은 약간의 HTTP 오류를 NSURLError에 매핑 한 것 같습니다. 예 : 404 to NSURLErrorFileDoesNotExist. 이 사실은 우리가 이전에 가지고 있었던 가정을 깨고, many snippet also take the error parameter as connection error, 이것은 절대적으로 틀릴 것입니다.


나는 애플을 찾아 보려고 노력하며 애플은 NSURLSessionDownloadTask에서이 변경 사항만을 언급했을 수 있습니다. 그리고이지도가 어떻게 적용되는지 잘 문서화되지 않았습니다.

는 NSURLSessionDataTask 또는 NSURLSessionUploadTask 달리, NSURLSessionDownloadTask는 NSError 객체를 해당로 HTTP 상태 코드를 통해보고 서버 측 오류를보고합니다. 개인적으로


나는 애플의 데브 팀은 큰 실수를 한 것 같아요; 그리고이 문서는 아직 일관성이없고 두렵지도 않다.

이번 변경 사항에 대한 자세한 정보는이 정보가 있습니까? 그리고 지금 연결 오류와 HTTP 오류를 구분하는 가장 좋은 방법은 무엇입니까?

+0

이 대답을보십시오 : http : // stackoverflow.com/questions/2342579/http-status-code for update and delete? rq = 1 – Wink

+0

해당 링크의 관련 답변/토론은 무엇입니까? – marosoaie

답변

0

답변은 항상 그렇듯이 같습니다. 서버가 200 오류 코드 (예 : JSON 응답)로 오류를 보내면 직접 확인해야합니다. 그렇지 않으면 :

  • 서버가 보내는 특정 HTTP 상태 코드에 신경 쓰는 경우 didReceiveResponse 대리자 메서드를 구현하고 오류를 가로 챕니다.
  • 요청이 실패하고 걱정하지 않는 이유만으로도 완료 콜백의 error 매개 변수를 통해 번을 오류로 보장하지만 특별한 오류가 발생할 수는 없습니다. 성공의 정의된다

참고 :

  • 결과 코드 200 (OK)
  • 결과 코드 304 (수정 NOT)
  • A는 200 또는 304를 반환하는 페이지로 리디렉션

정의가 다른 경우 (예 : 서버가 오류 페이지로 리디렉션하여 잘못된 URL에 응답하는 경우) detec에 대리자 메소드를 추가해야합니다 리디렉션을 처리하고이를 오류로 처리합니다.

+0

수신 응답이 연결 오류로 전환되지 않는다는 의미는 아닙니다. 내 질문은 연결 오류와 상태 코드의 의미가 아닌 HTTP 오류를 구별하는 방법입니다. – Karl

+1

서버에서 약속 한 바이트 수 (Content-Length)를 받기 전에 연결이 끊어지면 NSE 오류가 발생합니다. IIRC의 세 가지 오류 중 하나 인 NSURLErrorTimedOut 또는 SURLErrorNetworkConnectionLost 또는 NSURLErrorNotConnectedToInternet 중 하나가 발생할 수 있습니다. – dgatwood

+0

설명서의 해당 구는 서버 측 오류가 NSError 객체를 생성하지 않는다는 것을 나타내는 것이 아니라 오히려 보장 할 수 없음을 나타 내기위한 것이 아닙니다. 서버 측 오류는 JSON 사전과 같은 다른 방법으로보고되거나 Fail Whale이있는 페이지로 리디렉션하는 등의 방법으로보고 될 수 있습니다. 일부는로드 시스템에서 반드시 감지 할 수있는 것은 아닙니다. 서버가 다른 방법으로 오류를보고하거나 서버가 예기치 않은 데이터 (예 : JSON 대신 HTML)를 보내면 앱에서 오류를 적절히 감지하여 올바른 작업을 수행해야합니다. – dgatwood