这些类被归为5组:URL 载入,缓存管理,认证和证书,cookie,协议支持。
URL载入
最常用的莫过于URL载入了,它可以让应用程序创建一个请求,然后把资源下载下来。
一个URL资源的请求是用NSURLRequest类。这个类封装了URL和一些协议属性。同时还提供了请求超时和使用本地缓存数据的接口。NSMutableURLRequest就是NSURLRequest子类,可以让客户端程序更改现有的请求。
注意,客户端程序用NSMutableURLRequest初始化一个连接或者下载之后,其实这个请求已经被深度复制了。也就是说,一旦下载开始,你再去更改request属性已经无济于事了。
像HTTP这种协议,都有自己特有的一些属性,这就要求我们对NSURLRequest和NSMutableURLRequest类进行扩展来对访问这些属性。比如HTTP协议要求向NSURLRequest类添加方法返回请求体,头信息和传输方法等信息。同时要求NSMutableURLRequest提供方法可以设置这些相应属性。而这些方法都是在NSURLProtocal类中规定好了的。
从服务器返回的响应可以分成2个部分:一部分是描述内容属性的元数据,另一部分就是真实的内容数据。NSURLResponse封装好的方法应该可以应对元数据处理,比如内容大小,字符编码,对应的url等信息的处理。当然了 ,不同协议会子类化NSURLResponse来满足自己的需求,比如NSHTTPURLResponse就添加了头和返回码的支持。
重要:只有元数据存储在NSURLResponse中。其他的包括NSURLResponse本身, URL内容以及任何程序提供的信息都包装在NSCachedURLResponse实例中。
NSURLConnection和NSURLDownload类都提供了接口来建立连接然后下载内容。NSURLConnection提供代理方法,一接收到数据就会被调用。而NSURLDownload是直接把内容写到硬盘。这2个类也都提供了跳转,验证和错误处理等方法。
NSURLConnection提供了能为每个请求缓冲数据的方法,而NSURLDownload是直接下载不缓冲。
缓冲管理
URL载入系统使用硬盘和内存缓冲配合的方式,来削弱对于网络的过分依赖,提供对已缓冲数据高速的读取。缓存针对每个应用会有所不同。
NSURLConnection会向NSURLRequest询问缓存存在哪里。
NSURLCache提供了 配置缓存大小和存储位置的一些方法。同时提供管理包含缓冲响应的NSCachedURLResponse对象集合的方法。
NSCachedURLResponse把NSURLResponse和URL内容等数据进行封包。同时还提供用户信息字典,用以缓存所有客户数据。
不是所有的协议都支持缓冲。目前只有http和https请求是用缓存的,并且https还没有硬盘缓存。
NSURLConnection的connection:willCachedResponse:函数 能够控制响应是否被缓存,还有是否只缓存在内存中。
认证和证书
有些服务器限定了某些资源的访问。要求用户提供有效的用户名和密码。这种情况下,被限定的资源组成一个域,这个域都要求有证书才能访问。
URL 载入系统提供了一些类处理模块认证和保存证书。证书可以指定在一个请求中,或者程序启动之后生效,或者永远的存储在用户的keychain里面。
注意:存储在用户keychain里面的证书对于每个程序都有效。
NSURLCredential类封包了含有用户名,密码和存储种类信息的证书。NSURLProtextionSpace类代表了一个需要证书的受保护空间。受保护的空间可以限定到单独一个URL, 服务器上一个域,或者一个代理。
而NSURLCredentialStorage类则把NSURLCredential和NSURLProtextionSpace对象进行封装。管理他们的对应关系。
NSURLAuthenticationChall
NSURLProtocol 的子类用NSURLAuthenticationChall
Cookie存储
因为HTTP协议是无状态协议,所以URL请求经常使用cookie提供数据存储。URL载入系统也提供接口用来创建 管理本地cookie和发送接受服务器端cookie。
NSHTTPCookie类封装了:cookie,提供访问器操纵常见的cookie属性。它还提供HTTP Cookie转换成NSHTTPCookie实例,把NSHTTPCookie实例转换成NSURLRequest能使用的头信息的方法。URL载入系统自动发送NSURLRequest能使用的cookie,除非请求不需要cookie。同样,NSURLResponse返回的cookie也能和本地的cookie协同。
NSHTTPCookieStorage类负责管理供各个程序使用NSHTTPCookie的对象。
注意:在iOS系统中,Cookie并不能应用之间共享。
NSHTTPCookieStorage允许程序定义cookie接受法则。可以选择经常接受,从来不接受或者只接受相同域的cookie。
注意:改变cookie接受法则,会影响所有正在运行的程序。
当其他程序更改了cookie存储或者接受法则,NSHTTPCookieStorage会发送NSHTTPCookieStorageCooki