iOS開発-ネットワーク、HttpとHttps

6111 ワード

一、ネットワーク基礎
1.ネットワーク基盤
    001   :          ?
          :(1)                    
             (2)                   

    002       
        2-1    (      ipad        APP)
        2-2    (     -     )
        2-3   (          )
        2-4   (         )
        2-5    (          )

2.Http
    001 URL
        1-1        (       URL)
        1-2 URL  
            a.        
            b. url  (  \    \  )
                  :     ,            、      
                    :       (   ) IP  (  )
                  :     (   )      

        1-3     
            【file】             ,   file://(       )
            【ftp】             ,   ftp://
            【mailto】          ,   mailto:
            【http】       ,           ,   http://(           )

    002 http  
        2-1 http      
            a.       
            b.                  
            c.                  

        2-2 http     
            a.    (    ,         ,     )
            b.  (        )
            c.      (1.1         ,              ,
                             ,      ,            )
        2-3       
            a.  :           
            b.  :             

    003 GET POST  
        3-1 http         
        GET(  )、POST(  )、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH

        3-2 GET POST     【          】
            GET
               URL   ?             ,       &  ,  
            http://ww.test.com/login?username=123&pwd=234&type=JSON
                      URL     ,   URL            ,      1KB

            POST
                            
               ,POST          (             )

        3-3     【        ,       POST  】
            a.         ,      ,   POST  
            b.GET     POST   ,      \    ,   POST
            c.         (    ),    GET
            d.     、  、    ,    POST
    004 iOS   http     
        4-1     
            NSURLConnection 03        
            NSURLSession    13   iOS7  ,   NSURLConnection【  】
            CFNetwork           、C   

        4-2      
            ASIHttpRequest
            AFNetworking        【  】
            MKNetworkKit

    005 http      
        5-1   
            【     +   ·   】
        5-2   
            【   +   】
        5-3     
            a.               (        )         
            b.           ,               ,             ,
                               
        5-4    
            【200】:    
            【400】:          ,       
            【404】:      
            【500】:       ,        

3.Https
1.https    
  1) HTTPS(  :Hyper Text Transfer Protocol over Secure Socket Layer),
              HTTP  ,    HTTP    。
  2)  HTTP   SSL ,HTTPS      SSL,            SSL。 
          URI scheme(       ),    http:  。     HTTP    。
  3) https:URL      HTTP, HTTPS     HTTP          /     ( HTTP TCP  )。

2.HTTPS HTTP          :
  1) https     ca    ,        ,    。
  2) http        ,       ,https         ssl      。
  3) http https             ,        ,   80,   443。
  4) http      ,     ;HTTPS    SSL+HTTP            、         , http    。

3.    
  1) HTTPS                     ,                           ,
                    。
  2)HTTPS                       ( VeriSign、Microsoft )
   (  “                 ”)。
  3)  ,       HTTPS      ,          https                https  ,
                  。
  4)              https           ,      。

4.      。
4.1        NSURLSession       ,      。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] 
                                          delegate:self 
                                          delegateQueue:[NSOperationQueue mainQueue]];

    NSURLSessionDataTask *task =  [session dataTaskWithURL:[NSURL URLWithString:@"https://www.apple.com"] 
                                           completionHandler:^(NSData *data, 
                                                               NSURLResponse *response, 
                                                               NSError *error) {
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    }];
    [task resume];
}

/*
         HTTPS ,           
              ,             
 Challenge:       (         )
 protectionSpace :      
 NSURLAuthenticationMethodServerTrust :             
 */
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge 
        completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, 
                                    NSURLCredential *))completionHandler
{
    //    NSLog(@"didReceiveChallenge %@", challenge.protectionSpace);
    NSLog(@"      ");
    // 1.            ,         
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
        NSLog(@"                 ");
        /*
         NSURLSessionAuthChallengeUseCredential = 0,                         
         NSURLSessionAuthChallengePerformDefaultHandling = 1,                (       )
         NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2,         ,        
         NSURLSessionAuthChallengeRejectProtectionSpace = 3,                   ,       
         */
//        NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];

        NSURLCredential *card = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust];
        completionHandler(NSURLSessionAuthChallengeUseCredential , card);
    }
}

4.2      AFN  ,               ,AFN        。

4 URL中国語トランスコード問題
   //1.      

    NSString *urlStr = @"http://120.25.226.186:32812/login2?username=   &pwd=123";
    NSLog(@"%@",urlStr);
    //      
    urlStr =  [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"%@",urlStr);

    NSURL *url = [NSURL URLWithString:urlStr];