URL加载系统的简介
URL加载系统是一组类和协议的集合,它提供App去访问URL指定的内容的一系列协议和API。
URL加载系统所支持的协议如下:【ftp://】、【http://】、【https://】、【file://】、【data://】。另外它还支持代理服务和网关处理。同时URL加载系统提供了一些辅助类用来对加载类进行辅助修改,可以分为以下五个类
1、协议支持
2、授权与认证
3、Cookie存储
4、配置管理
5、缓存管理
加载系统的结构如下图:
由图可以看到,URL加载系统提供了六种不同的类对URL加载系统进行处理,根据不同的需求去选择不同的类。
URL Loading中类的简单介绍
1、响应请求:NSURLResponse
一个响应可以分为两个部分:描述内容的元数据和内容数据本身,NSURLResponse类封装了大部分协议的响应元数据,这些元数据包括MIME类型,期望的Content-Length,编码格式,及提供响应的URL等!其子类提供与协议相关的额外元数据。如NSHTTPURLResponse存储了web服务器返回的响应头和状态码
2、请求响应:
NSURLSession与NSURLConnection:
NSURLSession是iOS7后出现的,NSURLConnection是iOS7之前,其两者之间的不同大致分为六种,使用现状、普通任务与上传任务、下载任务、请求方法的控制、断点续传的方式以及配置信息
NSURLDownload与NSURLSession
两者都可以用来进行下载任务,其不同之处在于前者不支持iOS系统,NSURLSession具有应用挂起、终止、异常退出时继续进行下载的能力
NSURLRequest与NSMutableURLRequest
NSMutableURLRequest是NSURLRequest的子类,他们都封装了URL和协议指定的属性,及依赖于协议的行为。同时也指定了本地缓存策略及连接超时时间。例如一些协议支持协议指定的属性,如HTTP协议可以添加返回HTTP请求体,请求报头和传输方法到NSURLRequest中。特别注意的是使用NSMutableURLRequest初始化一个连接或下载时,将会对NSMutableURLRequest实例进行深拷贝。因此在初始的请求上做修改时不会影响到连接和下载对象。
认证和证书:
NSURLCredential:封装了由认证信息和持久化行为组成的证书。
NSURLProtectionSpace:表示需要特定证书的区域。一个保护区域可以限制到单独的URL,拥有web服务器的区域,或引用一个代理。
NSURLCredientialStorage:一般是一个共享实例,用于管理证书存储和提供NSURLCredential对象到NSURLProductionSpace对象的映射。
NSURLAuthenticationChallenge:封装了认证一个请求的的NSURLProtocol实现所需要的信息:一个建议的证书、保护空间、错误信息或者协议用于确定所需要认证的响应、以及认证尝试次数等。初始对象(即请求发送者)必须实现NSURLAuthenticationChallengeSender协议。NSURLAuthenticationChallenge实例被用于NSURLProtocol的子类来告诉URL加载系统需要认证。他们同样为NSURLConnection和NSURLDownload的代理方法提供了便利的自定义认证处理
URLCache缓存
URL加载系统提供基于磁盘和内存的缓存,允许程序减少对网络连接的依赖,并提供对缓存响应的快速访问。缓存存储在每个app的缓存文件夹下。NSURLConnection会根据缓存策略(初始化NSURLRequest对象中指定的)来查询缓存。
不是所有的协议实现都支持响应缓存。当前只有http和https请求可被缓存。
Cookie缓存
Cookie的设置通常把首次请求网络的数据作为下一次请求的一部分进行数据请求,以确定快速登陆等等信息。
协议支持
URL加载系统默认支持http, https, file, ftp, data协议。另外,URL加载系统也允许我们注册自己的类来支持额外的系统层级的网络协议。我们也可以添加指定协议的属性到URL请求和URL响应对象