iOS开发-网络、Http与Https

一、网络基础


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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,576评论 25 707
  • 10月23日,星期一,晴 也许是最近连续上班的缘故,也许是太累了。今天早上,闹铃对我竟然不起作用了,一觉醒来,一看...
    月儿贝贝阅读 230评论 0 1
  • 在老家,有贵客临门,要沏盖碗茶。 盖碗茶的用料讲究。除了茶叶——一般是上好的茉莉花茶,还有桂圆、核桃仁、苹果干、杏...
    风言无语阅读 706评论 41 71
  • 声明:2016豁出去的勇气有所提高,自己文字功底差怕被笑话以前不敢写,自己思考一番就放下了! 自爱篇:以前总是认为...
    琐事反思阅读 621评论 9 7
  • 淑女风 适于18--25岁 这种金丝绒的裙子从去年卖的就很火,只是没有带波点的,这种带波点的就会显得比较俏皮可爱一...
    台东DDM三店刘焕阅读 203评论 3 0