URL Loading System Programming Guide
(本文为概要描述,部分有删减)
关于
本指南描述了使用标准Internet协议来处理Urls、与服务器通信的相关类。
URL Loading System包含了一系列类和协议,来支持app访问URL上的内容。核心类是NSURL,帮助app来控制URL以及该URL指向的内容。
为了支持NSURL,apple的Foundation framework提供了丰富的类来帮助你加载URL的内容,从服务器更新数据,管理cookie存储,控制缓存,在app上处理证书和认证方式,以及扩展用户协议。
URL Loading System支持通过以下协议来访问资源:
- FTP协议(ftp://)
- 超文本传输协议(http://)
- 加密超文本传输协议(https://)
- 本地资源(file://)
- 数据URLs(data://)
显然,它也支持代理服务器和用户系统设置的SOCKS网关(?)。
提示:此外,OS X和iOS在其他应用中也提供了打开URLs的APIs,例如Safari.这些APIs不包含在本文档中.
*For more information about Launch Services in OS X, read Launch Services Programming Guide.
*For more information about the openURL: method in the NSWorkSpace class in OS X, read NSWorkspace Class Reference.
*For more information about the openURL: method in the UIApplication class in iOS, read UIApplication Class Reference.
概述
URL loading system包含了大量辅助类来协助处理URLs.主要可分为五大类:协议支持,证书认证,cookie存储,配置管理和缓存管理.
加载URL
URL loading system中最常用的类允许app从源URL中检索内容.根据不同app的需求,可以选择不同的检索方式.如何选取合适的API取决于你的OSX版本或者iOS app的目标版本,以及取得数据的类型,文件或者是一块内存:
* iOS7以上版本,或者OSX v10.9以上版本中,应优先使用NSURLSession来处理URL请求.
* 如果必须支持OSX旧版本,可以选择NSURLDownload来下载URL中的内容并存储到硬盘中.
* 如果必须支持iOS或者OSX的旧版本,可以使用NSURLConnection下载内容并保存到内存中,需要的话,也可以将数据写入硬盘.
如何选取合适的方法主要取决于你想把数据保存到内存中还是硬盘中.
获取数据内容到内存中
在较高水平上,有两种基本方式来加载URL:
- 对简单请求,直接使用NSURLSession来从一个NSURL对象检索内容,无论结果是一个NSData对象还是一个磁盘文件.
- 对复杂一点的请求,比如上传数据,使用NSURLSession或者NSURLConnection来加载一个NSURLRequest,或者其子类NSMutableURLRequest.
无论使用哪种方式,app能通过下面两种方法获得响应数据:
- 一个完成处理的block.当加载URL的类从服务器接收完数据后会调用这个block.
- 一个自定义的delegate.当URL加载类从服务器获取数据时,会周期性的调用其代理方法.如果必要,app可以负责不断累计获得数据.
此外,对数据本身来说,URL加载类给以上的block和delegate都提供了一个与请求相关的响应对象(压缩的元数据),比如MIME和内容长度.
相关章节:Using NSURLSession Using NSURLConnection
以文件形式下载数据
同样有两种基本方式,来以文件形式从一个URL下载内容:
- 对简单请求,直接使用NSURLSession来从一个NSURL对象检索内容,无论结果是一个NSData对象还是一个磁盘文件.
- 对复杂一点的请求,比如上传数据,使用NSURLSession或者NSURLDownload来加载一个NSURLRequest,或者其子类NSMutableURLRequest.
NSURLSession相比于NSURLDownload有两个显著优点:它可以在iOS上使用,而且即使是当应用程序当挂起,退出,闪退时,依然能在后台进行数据下载.
提示:通过NSURLDownload或者NSURLSession进行的下载是没有缓存的,如果需要缓存下载结果,必须使用NSURLConnection或者NSURLSession,并且由开发者自己将数据写入磁盘.
相关章节:Using NSURLDownload Using NSURLSession
辅助类
URL加载类使用两个具体的加载类提供额外的数据:一个是针对请求本身(NSURLRequest),一个是针对服务器的响应(NSURLResponse).
URL请求
一个NSURLRequest对象封装了一个URL以及相应的协议信息,也指定了本地缓存策略.当使用NSURLConnection和NSURLDownload,还可以设置其超时时间(NSURLSession的超时在per-session basis中配置).
提示:当客户端app使用一个NSMutableURLRequest对象向服务器发起连接或者下载时,request会进行深拷贝,在下载初始化完成后修改request不会影响之前的设置.
一些协议支持设置其特有的属性.比如HTTP协议,在NSURLRequest中加入了返回HTTP请求体,请求头的方法以及转换方法.同样NSMutableURLRequest也加入了这些方法.
响应数据
服务器对一个请求的响应数据可以分为两部分:内容数据本身和其描述.通常协议的元数据被封装在NSURLResponse中,而且包含了MIME类型,预期数据大小,文本编码类型,以及请求的URL.NSURLResponse特定协议的子类可以提供更多的额外信息,比如NSHTTPURLResponse存储了服务器返回的响应头和状态码.
提示:NSURLResponse对象中只存储了响应的元数据.其他的URL加载类通过block或代理提供响应数据.一个NSCachedURLResponse实例包含一个NSURLResponse对象,URL内容数据以及其他额外信息,参见后文Cache Management .
重定向和其他请求变化
一些协议,比如HTTP,当目标URL迁移时会通过某种方式通知客户端.当这种情况发生时,URL加载类会通知其代理.如果你的app实现了对应的代理方法,你可以选择重新请求定向后的地址还是返回一个错误信息.
相关章节:Handling Redirects and Other Request Changes
认证和证书
一些服务器会限制访问权限,除非你提供相应的认证信息.从服务器的角度来看,限制内容被分组到一个集合,需要单独的一套认证.证书也可以被用来确认访问的服务器是不是可信的.
提示:证书永久存储在用户钥匙串中,所有app公用.
缓存管理
The URL loading system提供了磁盘缓存和内存缓存来减少app对网络的依赖,并加快加载速度.
cookie管理
由于HTTP协议的无状态特性,客户经常使用cookie来提供持久存储数据的URL请求。URL加载系统提供接口来创建和管理cookie,把cookie作为HTTP请求的一部分,并接收cookie时解释web服务器的响应。
协议支持
URL加载系统本身支持http,https,file,ftp和data协议。然而,URL加载系统还允许应用程序注册你自己的类已支持额外的应用程序层网络协议。您还可以在URL请求和响应对象中添加特定的协议属性。
转载请注明出处:http://blog.csdn.net/qq329735967
任何疑问欢迎Email至[email protected]