HTTP和HTTPS协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
URL:就是网址.http://www.hcios.com/archives/1547
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是什么请求。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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];
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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];
同步与异步的差异:同步即同步请求网络数据,时间上是即时获取到数据,每次都是即时从网络上获取数据.而异步则可以从之前已经缓存过的数据中读取,从而异步比同步加载数据要快捷许多.