网络编程一
数据的传输
1、服务器的数据是分成一个个单个的数据包传入客户端
2、客户端与服务器做数据传输,数据必须约定使用同一种格式
HTTP协议的概念
1、全称“超文本传输协议”,浏览器和服务器之间的通信规则
2、HTTP协议永远都是客户端发起请求,服务器回送响应
3、客户端发送一个HTTP请求,是向服务器提交了一个HTTP请求包
4、服务器收到请求之后,向客户端回应一个HTTP响应包
HTTP的请求方式:GET请求和POST请求
HTTP——请求包结构:请求头、请求体
GET:url、请求头
POST:url、请求头、请求体
HTTP的响应包结构:响应头、响应体
HTTP响应有个状态码,200为成功,404未找到页面
数据格式:JSON(主要)、XML
响应头中Content-Type表示响应体中数据的类型
主要类型:text/html、application/json、text/json、text/xml、image/jpeg
NSURLSession的相关使用
(可以参考代码:UI学习—-UI高级—-07网络编程—-代码—-01)
session网络会话
//1 URL (定位资源)
//2 URLRequest (配置请求:url请求头[请求体])
//请求方式:默认是get请求
//3 session (会话)<默认发起的是异步的网络请求>
//4 task (任务)
//(1)解析错误
//(2)查看状态码
//(3)解析data数据
//(4)转换成model
//(5)显示在UI界面上
//5 resume (执行任务)
[task resume];//resume:恢复
NSURLRequest
(可以参考代码:UI学习—-UI高级—-07网络编程—-代码—-02)
1、NSURLRequest用于存储客户端发送给服务器的数据包信息和请求设置
2、NSURLRequest只有很少的基本设置选项,我大部分使用其子类:NSMutableURLRequest
3、NSURLRequest (url请求头请求体[post]请求方式缓存策略...)
requestWithURL:url
cachePolicy:缓存策略
timeoutInterval:超时的时间
{NSURLRequestUseProtocolCachePolicy:默认的协议缓存策略(首先判断是否有缓存,如果缓存没有,直接从服务器获取;如果有缓存,根据响应中的cache-control中的一个字段判断,询问服务器数据是否有更新,如果有更新,重新请求服务器)}
//NSURLRequest *request = [NSURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120];
NSURLSessionConfiguration
1、一个Session可以发起的多个网络请求任务(Task)
2、三种类型的任务(Task):
2.1数据任务:数据任务擅长处理小且频繁的应用程序与服务器之间的请求,例如:请求JSON数据,因为数据任务不会将数据存储到磁盘文件中,所以不支持后台Session
2.2下载任务:以文件的形式接收数据,可以在程序没有运行时进行后台下载
2.3上传任务:以文件的形式发送数据,可以在程序没有运行时进行后台上传
3、session(可以参考代码:UI学习—-UI高级—-07网络编程—-代码—-03)
//(1)使用默认的session
//NSURLSession *session = [NSURLSessionsharedSession];
//(2)自定义的session
/*
+defaultSessionConfiguration用于创建默认类型的Session对象
+ephemeralSessionConfiguration用于创建临时类型的Session对象
+backgroundSessionConfiguration:(NSString*)identifier用于创建后台Session对象
identifier:作用标示后台的session,最好和App的bundle id相同
*/
NSURLSessionConfiguration *config =[NSURLSessionConfiguration defaultSessionConfiguration];
//配置属性
//配置缓存策略
config.requestCachePolicy =NSURLRequestUseProtocolCachePolicy;
//是否使用蜂窝数据
config.allowsCellularAccess = YES;
//...
[NSURLSession sessionWithConfiguration:config];
//task
//resume
NSURLResponse(可以参考代码:UI学习—-UI高级—-07网络编程—-代码)
//下载任务
NSURLSessionDownloadTask(可以参考代码:UI学习—-UI高级—-07网络编程—-代码—04)