-
http和https
- URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源
URL就是资源的地址,位置,互联网上的每个资源都有一个唯一的URL
URL的基本格式= 协议://主机地址/路径
协议:不同的协议,代表着不同的资源查找方式,资源传输方式{ftp://(文件传输协议), http://(超文本传输协议), https://(安全超文本传输协议), file:// (本地文件协议) }
主机地址:存放资源的主机的IP地址(地域)
路径:资源在主机的位置
-
HTTP协议
Hyper Transfer Protocol (超文本传输协议) 是用于万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.
工作原理: HTTP协议采用请求/响应模型. 客户端向服务器发送一个请求报文,服务器以一个状态作为响应.
-
HTTPS:
安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版. HTTPS协议使用SSL在发送方和接受方通过交换共知的秘钥来实现.因此,传送的数据不容易被网络黑客截取和解密.
SSL是Netscape公司所提出的安全保密协议,在浏览器和web服务器之间构造安全通道来进行数据传输,SSL运行TCP/IP 层值上,应用层之下,为应用程序提供加密数据通道.
-
异同
1 : https协议需要到ca申请证书,一般免费证书很少,需要交费
2 : http是超文本传输协议,信息是明文传输,https则是具有安全性的加密传输协议
3 : http和https是用的是完全不同的链接方式,用的端口也不一样,前者是后者是443
4 : http的链接很简单,是无状态的
5 : https是协议是由SSL + HTTP 协议构建的可进行加密传输,身份认证的网络协议 要比http安全
-
请求方式GET和POST
连接方式:
同步连接:程序容易出现卡死现象
异步链接:等待数据返回
异步连接有两种实现方式:
设置代理,接收数据
实现block
-
注意 网络请求,允许 Http 请求(info.plist里面添加)
*NSAppTransportSecurity 类型 Dictionary 下添加 *
NSAllowsArbitraryLoads 类型 Boolean ,值设为 YES
-
同步GET步骤 :
创建一个地址字符串,注意: 不要有空格
创建一个统一资源定位符(URL)
创建一个NSURLRequest,并配置缓存策略和超时时间
通过一个NSData对象获取网络请求的数据
-
同步POST步骤:
创建一个地址字符串,注意: 不要有空格
创建一个统一资源定位符
使用NSMutableURLRequest. 因为之后要对request做更改
创建一个上传数据的字符串,并且转成NSData对象
设置请求方式 (setHTTPMethod)
设置上传的Data(setHTTPBody)
通过一个NSData对象获取网络请求的数据
-
POST和GET的区别:
POST设置请求方式
GET设置Body
同步GET和POST的缺点: 会造成程序的卡顿,所以在开发中不推荐使用
//get异步实现(block和代理方法写在一起了)
//通过地址字符串,创建url
NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSURL *url = [NSURL URLWithString:urlString]; ```
//通过url,创建请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
\#pragma mark -----block
//调用带有block回调的方法,执行网络请求
//参数 1: NSURLRequest
//参数 2: block块里面的代码在哪个线程执行
```obj
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError)
{
//respone 携带的是接口的一些信息
//data 请求下来的数据信息(需要使用的)
//connectionError 错误信息
if (connectionError == nil)
{
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];
NSLog(@"%@",dict);
//这里应该刷新UI了
//1 : 给数据源数组赋值
//2 : 赋值结束之后,刷新UI ([[self.tableView reloadData])
//原则 : 主线程只负责更新UI
}
}];```
\#pragma mark -----代理
//代理的异步网络请求(GET)
//参数 1: NSURLRequest
//参数 2:代理
[NSURLConnection connectionWithRequest:request delegate:self];
#// POST异步(block和代理方法写在一起了)
//通过地址字符串,创建url
```obj
NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; NSURL *url = [NSURL URLWithString:urlString];
//通过url,创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//因为POST通过data给服务器传输数据,所有通过string创建data
NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
//设置请求方式
[request setHTTPMethod:@"POST"];
//设置body,
[request setHTTPBody:postData];```
\#pragma mark ----block
```obj
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil]; NSLog(@"%@",dict);
}];```
\#pragma mark ----代理
``` obj
[NSURLConnection connectionWithRequest:request delegate:self]; ```
____
______
\#pragma mark -----NSURLConnectionDataDelegate协议方法 实现
#//开始响应
- ````-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{```
//初始化保存结果的data
self.resultData = [NSMutableData data];}
//接收到数据
//这个方法会重复的执行,所以可能拿到一段一段的数据.这就是需要我们把这些数据拼接起来
- ```- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ ```
//为了防止 拿到的数据不全,所以把拿到的数据拼接到保存结果的data中.
``` [self.resultData appendData:data];}```
//结束响应
- ```- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
// NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:(NSJSONReadingAllowFragments) error:nil];
NSLog(@"异步代理 ---> %@",dict); ```
//更新数据源数组
//刷新UI
}