URL加载系统是通过URL访问各种内容的相关类和协议的一个集合,这个技术的核心就是NSURL类。
Foundation框架提供了丰富的类以用以下载、上载、cookie存储管理、响应cache控制、认证和证书存储,
URL支持以下协议:
- 文件传输协议 (ftp://)
- HTTP (http://)
- HTTPS (https://)
- 本地文件URL(file:///)
- Data URL (data://)
同时支持proxy服务器,SOCKS网关
概要
URL加载系统相关类:
获取数据到内存
两种获取URL数据的基本方法:
(1)使用NSURLSession API通过NSURL直接获取数据,返回数据可以是个内存中的NSData,也可以是disk上的一个文件
(2)对于更复杂的请求,比如上传数据,使用NSURLRequest
两种引用响应数据的方式:
(1)通过completion handler block,URL系统在结束接收数据时,会调用这个block
(2)提供自定义的delegate,URL系统在不同阶段调用delegate的方法
下载数据到文件
(1)使用NSURLSession API通过NSURL直接获取数据,返回数据可以是个内存中的NSData,也可以是disk上的一个文件
(2)使用NSURLRequest或者NSURLDownload
NSURLSession类相比NSURLDownload类,有两个好处:
- NSURLSession在iOS上可用
- 下载任务可以在后台执行,即使APP被挂起,终止,或者崩溃
由NSRULDownload和NSURLSession发起的任务返回数据是不会被cache的,如果需要cache则需要使用NSURLConnection或者NSURLSession并且将data写入disk。
Helper类
- URL请求
一个NSURLRequest对象是一个URL和协议相关属性的封装,当一个client通过NSMutableURLRequest发起一个连接或者下载任务时,这个对象会被深拷贝,这样任何对原有对象的修改都不会生效。 - 响应数据
NSURLResponse包括两部分:meta数据,content数据,meta数据描述了content的内容类型,如MIME类型,内容长度,编码方式
Credential和Authentication(资格和认证)
一些服务器限制某些特定内容的访问,需要用户提供某种资格来进行认证,比如客户证书,用户名和密码之类的用以获取权限的方式
从受信的另一个方向看,Credential(比如证书)也用来判断APP是否应该信任server。
URL加载系统提供相关类用以model化Credential和protected areas,也提供了安全的Credential永久化的方法。APP可以指定这些Credential到一个单一的请求,也可以是在APP启动后的时间里,或者是永久的储存在用户的KeyChain里。
NSURLCredential类封装了认证相关的信息(如用户名和密码)和持久化方案。
Cache管理
URL加载系统提供了一个包含内存管理和磁盘管理的cache,以APP为单位,可以加快URL请求。
NSURLCache类提供了配置cache大小和缓存位置的方法,还包括管理NSCachedURLResponse(包含cache过的response)对象集合的方法。
Cookie存储
由于HTTP协议的无状态性,client经常需要使用cookie提供URL请求相关数据的持久化存储,URL加载系统提供接口创建和管理Cookie,将Cookie作为HTTP请求的一部分发送。
具体参考NSHTTPCookieStorage类。
协议支持
URL加载系统支持http,https,file,ftp和data协议,同时允许APP注册自己的应用层网络协议。