2016-11-22 2 views
0

오랜 시간 동안 NSMutableURLRequest를 사용하여 서버에 연결했습니다.HTTPS로 전환 할 때 NSURLRequest를 사용하여 authenticationchallenge를받는 이유는 무엇입니까?

이중로드 트맆을 방지하기 위해, 내가 설정 한 USR/비밀번호 바로 헤더에이 같은이 잘 근무하고있다

NSMutableURLRequest *request = [NSMutableURLRequest 
      requestWithURL:[NSURL URLWithString:url] 
       cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:HTTP_REQUEST_TIMEOUT]; 
NSString *authStr = [NSString stringWithFormat:@"%@:%@", inUsr, inPwd]; 
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [[authStr dataUsingEncoding:NSISOLatin1StringEncoding] base64EncodedStringWithOptions:0]]; 

[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

은 "willSendRequestForAuthenticationChallenge"가 호출되지 않습니다 일부 오류가 발생하지 않는 한 그 방법은 언제나처럼 보였다있다, 그래서 : 이제 그러나, 나는 "http"대신 같은 URL의 언제나처럼 만 "HTTPS"를 사용하고

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {   
    NSDictionary *errorInfo = ((NSHTTPURLResponse *) challenge.failureResponse).allHeaderFields; 

    NSError *error; = [NSError errorWithDomain:@"httprequesthandler" code:WRONG_CREDENTIALS userInfo:errorInfo]; 
    [delegate finishedWithErrors:error]; 

, 갑자기이 방법은 때마다 호출된다.

정상 요청대로 작동하도록 요청합니다. 즉 기본 헤더를 채우고 하나의 요청 만 서버에 보냅니다.

나는 무엇을 놓치고 있는지 모르겠다. 그래서 포인터는 많이 감사 할 것이다.

답변

0

스키마 (또는 프로토콜)로 https을 사용하면 전송되는 데이터를 암호화하고 연결하려는 서버의 신뢰성에 대한 정보를 제공함으로써 연결이 안전하게 이루어 지도록 요청합니다.

여기에서 호출되는 대리자 메서드 (connection:willSendRequestForAuthenticationChallenge:)는 서버에서 자신을 인증하는 것과 관련이 없지만 서버는 자신을 인증합니다. 챌린지 개체 (NSURLAuthenticationChallenge)를 파헤 치면 서버가 사칭자가 아닌 실제로 연결하려고 시도한 서버임을 알려주는 자격 증명을 찾을 수 있습니다.

일반적으로 OS를 능가하는 방식으로 서버의 유효성을 검사하지 않으려면이 방법을 사용할 필요가 없습니다.

+0

allright. 감사! – Mathias