session 711
- 今天我们主要了解下NSURLSession 在iOS10中的新变化,以及我们怎么样更好的使用他。
- 主要分为3点:
- iOS10中API做了对应的拓展,丰富了功能。
- 聊聊安全性相关内容
- 开发者如何更优雅地使用
1.API拓展
1.0 历史
- 在了解最新的API的时候,我们还是需要关注下我们高级网络API的一些历史。
- 如图,在iOS7之前,我们一直使用的是NSURLConnection 作为网络请求的一大利器。随着时代的发展,我们需要保证网络数据的更好的使用。在13年的WWDC中,我们正式推出NSURLSession API保证使用。在经历了两个的过渡期,我们在15年把NSURLConnection正式否定。在此希望大家更好的使用NSURLSession。
1.1 NSURLSession的优点
- 它遵循了HTTP/1.1,SPDY,HTTP/2协议,基本覆盖了所有网络请求。
- 使用App Transport Security(ATS),保证请求的安全性。必须使用HTTPs
- HTTP Strict Transport Security(HTST),保证数据传输过程安全
- 不仅如此,在Cache,cookies,proxy,authentication 都进行了完善。
1.2 NSURLSession使用
- 首先要知道的是,NSURLSessionConfiguration
- configuration 可以设置请求的网络环境,(WIFI,移动数据)
- 多样的传输类型设置:视频,音频,文本等数据
- 缓存规则
- cookie 规则
- 存储空间大小的设置
- 请求超时时间设置
NSURLSessionConfiguration *congfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:congfiguration];
NSString *url = @"https://www.cloudoc.com";
NSURLSessionTask *task = [session dataTaskWithURL:[NSURL URLWithString:url] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
}];
[task resume];
- 注意:我们不要每个session 对应一个task请求,而是可以一对多的形式,保证高效实用。
2.0 HTTP/2 的介绍
- 关于HTTP/2 我们知道多少。
- 异步连接多路复用;
- 头部压缩;
- 请求/响应管线化;
- 多路复用请求;
- 对请求划分优先级;
- 压缩HTTP头;
- 服务器推送流(即Server Push技术);
2.1 Server Push
- 放置网络重复请求
- 服务器需要支持http2.0协议
- 最重要的是:直接适用于NSURLSession 客户端不用做任何处理
上图简单展示了一次HTTP1.1的请求。看以看到在每次请求的过程中都需要跟服务器进行一次通讯。从而延长的所有请求结束的时间。
HTTP2.0在使用了server Push 的HTTP2.0会进一步缩短请求时间,并且可以看到服务器会一次性将所有数据都返回,从而,获取数据的时间得到了缩短。
提高了网络的利用率。
3.0 Network statistics
- iOS10中新增对网络请求检测的API ,保证网络请求的准确。
- 主要有以下几个特质:
- 监测弱网环境
- 监测网络连接
- apple 全平台通用
3.1 API
- 主要有3个属性
- 1.taskInterval 链接时长
- 2.redirectCount 重连次数
- 3.transactionMetrics
3.2 NSURLSessionTaskTransactionMetrics
- 主要使用这个API获取每个阶段的网络请求时常,等数据,来分析对应的网络请求。
下图就是简单的一次网络请求的需要的每一步分解。
4.0 网络安全性
- 对传输数据进行加密
- 不要在使用RC4加密算法(已经被公开)
- 测试 $nucurl https://你的网址;
- $nucurl —enable-rc4 https://你的网址
- (iOS10最新的对网络安全访问)App Transport Security
- 两个字段需要更新 NSAllowsArbitraryLoadsInWebContent(wkwebView)
NSRequiresCertificateTransparency
网友评论