二十四桥明月夜

一个没有名字的网工

HTTP和HTTPS协议

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
URL就是资源的地址,位置.互联网上的每一个资源都有一个唯一的URL.
URL的基本格式=协议://主机地址/路径.
HTTP协议:
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统,全称是Hypertext Transfer Protocol(超文本传输协议),而且它是属于上面的层次模型的应用层。
HTTPS协议:
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容 就需要SSL(安全套接字层).
 
SSL是Netscape公司所提出的安全保密协议,在浏览器和web服务器之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上,应用层之下,为应用程序提供加密数据通道.
 
 
HTTPS和HTTP的区别主要为以下四点:
  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
反正咱们只需要记住一点,HTTPS比HTTP安全。但是iOS9.0之后,要求APP内网络访问必须采用HTTPS而不是HTTP,所以如果你们的接口还是HTTP的话,需要做一些简单的配置.
 
基于网络的应用就决定了数据链上不仅仅只有客户端(应用)这一环,还需要有服务器(数据源)这一环,这时候我们就需要向服务器发送请求,获取数据.
请求方法。其实请求并不单单只有Get、Post这两种。一共有:GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH八种之多。而最常用的是Get、Post.
我们能用到的,请求方式有两种:一种get请求,一种post请求。get请求是将信息直接拼接在URL后面,在真正开发中用到比较多;post请求是将一些比较重要的信息转化为二进制流。在真正开发中post请求常见于验证用户名密码是否正确,给服务器上传数据等。 注意不管是get请求还是post请求都是由后台决定的,程序员可以通过接口文档知道当前的请求方式是get还是post。请求方式不仅仅限于get和 post,还有delete和put等,除了get请求可以使用NSUrlRequest之外,其他请求必须使用 NSMutableURLRequset,明确的指定当前的HTTPMethod是什么请求。
 
 1 #pragma mark - 同步get请求
 2  //1.创建URL
 3     NSURL *url = [NSURL URLWithString:GET_URL]; //GET_URL是宏定义的一个网址链接
 4 //2.根据URL创建具体的请求(使用缓存策略)
 5  NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20];
 6  //3.链接服务器
 7     //参数1:请求对象
 8     //参数2:存储一些网络请求的信息(一般为包体)现在一般写nil
 9     //参数3:错误信息
10 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
11 //4.进行json数据解析
12     NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
13     NSLog(@"%@", resultDic);
同步GET请求
 1 #pragma mark - 同步post方法
 2 //创建url
 3     NSURL *url = [NSURL URLWithString:POST_URL];
 4     //创建网络请求[要进行内容的拼接设置,必须是可变的]
 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 6     
 7 //    设置body
 8     //创建一个链接字符串(这个内容在以后的开发中接口文档都有标注)
 9     NSString *dataString = POST_BODY;
10     //对链接字符串进行编码(这步不可以忘记)
11     NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
12     
13     //设置请求格式为POST请求(字母必须全部大写)
14     [request setHTTPMethod:@"POST"];
15     //设置请求体(body)
16     [request setHTTPBody:postData];
17     
18     //3.链接服务器
19     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
20     //4.进行json数据解析
21     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
22     NSLog(@"%@", dic);
同步POST请求
 1 #pragma mark - 异步get请求
 2 //1.创建url
 3     NSURL *url = [NSURL URLWithString:GET_URL];
 4     //2.创建session对象
 5     NSURLSession *session = [NSURLSession sharedSession];   //单例
 6     //3.创建task请求任务
 7     //NSURLSessionTask是基于任务去完成相关的事件的
 8     //NSURLSessionTask所有的任务均放在这个里边实现
 9     NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
10         //4.解析相关的数据
11         if (error == nil) {
12             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
13             NSLog(@"%@", dic);
14         }
15     }];
16     //5.核心部分:启动任务[这个步骤容易忘记]
17     //原因:NSURLSessionTask实例出来的任务处于挂起状态,如果不启动,不会走block中的实现内容
18     [task resume];
异步GET请求
#pragma mark - 异步post请求
//1.创建url
    NSURL *url = [NSURL URLWithString:POST_URL];
    //2.创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //核心设置BODY
    NSString *bodyStr = POST_BODY;
    NSData *postData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];
    
    //3.创建session对象
    NSURLSession *session = [NSURLSession sharedSession];
    //4.创建task
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //5解析数据
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"%@", dic);
    }];
    //6.启动任务
    [task resume];
异步POST请求

同步与异步的差异:同步即同步请求网络数据,时间上是即时获取到数据,每次都是即时从网络上获取数据.而异步则可以从之前已经缓存过的数据中读取,从而异步比同步加载数据要快捷许多.

 
 
 
 
posted @ 2016-05-13 17:38  24桥明月夜  阅读(255)  评论(0编辑  收藏  举报