[IOS] 类 NSURL

URL 载入系统是一套类和协议的集合,提供根据应用程序通过 URL 访问数据的底层支持。

这些类被归为5组:URL 载入,缓存管理,认证和证书,cookie,协议支持。



URL载入

最常用的莫过于URL载入了,它可以让应用程序创建一个请求,然后把资源下载下来。

一个URL资源的请求是用NSURLRequest类。这个类封装了URL和一些协议属性。同时还提供了请求超时和使用本地缓存数据的接口。NSMutableURLRequest就是NSURLRequest子类,可以让客户端程序更改现有的请求。

注意,客户端程序用NSMutableURLRequest初始化一个连接或者下载之后,其实这个请求已经被深度复制了。也就是说,一旦下载开始,你再去更改request属性已经无济于事了

HTTP这种协议,都有自己特有的一些属性,这就要求我们对NSURLRequestNSMutableURLRequest类进行扩展来对访问这些属性。比如HTTP协议要求向NSURLRequest类添加方法返回请求体,头信息和传输方法等信息。同时要求NSMutableURLRequest提供方法可以设置这些相应属性。而这些方法都是在NSURLProtocal类中规定好了的。

从服务器返回的响应可以分成2个部分:一部分是描述内容属性的元数据,另一部分就是真实的内容数据。NSURLResponse封装好的方法应该可以应对元数据处理,比如内容大小,字符编码,对应的url等信息的处理。当然了 ,不同协议会子类化NSURLResponse来满足自己的需求,比如NSHTTPURLResponse就添加了头和返回码的支持。

重要:只有元数据存储在NSURLResponse中。其他的包括NSURLResponse本身, URL内容以及任何程序提供的信息都包装在NSCachedURLResponse实例中。

NSURLConnectionNSURLDownload类都提供了接口来建立连接然后下载内容。NSURLConnection提供代理方法,一接收到数据就会被调用。而NSURLDownload是直接把内容写到硬盘。这2个类也都提供了跳转,验证和错误处理等方法。

NSURLConnection提供了能为每个请求缓冲数据的方法,而NSURLDownload是直接下载不缓冲。

缓冲管理

URL载入系统使用硬盘和内存缓冲配合的方式,来削弱对于网络的过分依赖,提供对已缓冲数据高速的读取。缓存针对每个应用会有所不同。

NSURLConnection会向NSURLRequest询问缓存存在哪里。

NSURLCache提供了 配置缓存大小和存储位置的一些方法。同时提供管理包含缓冲响应的NSCachedURLResponse对象集合的方法。

NSCachedURLResponseNSURLResponseURL内容等数据进行封包。同时还提供用户信息字典,用以缓存所有客户数据。

不是所有的协议都支持缓冲。目前只有httphttps请求是用缓存的,并且https还没有硬盘缓存。

NSURLConnectionconnection:willCachedResponse:函数 能够控制响应是否被缓存,还有是否只缓存在内存中。

认证和证书

有些服务器限定了某些资源的访问。要求用户提供有效的用户名和密码。这种情况下,被限定的资源组成一个域,这个域都要求有证书才能访问。

URL 载入系统提供了一些类处理模块认证和保存证书。证书可以指定在一个请求中,或者程序启动之后生效,或者永远的存储在用户的keychain里面。

注意:存储在用户keychain里面的证书对于每个程序都有效。

NSURLCredential类封包了含有用户名,密码和存储种类信息的证书。NSURLProtextionSpace类代表了一个需要证书的受保护空间。受保护的空间可以限定到单独一个URL, 服务器上一个域,或者一个代理。

NSURLCredentialStorage类则把NSURLCredentialNSURLProtextionSpace对象进行封装。管理他们的对应关系。

NSURLAuthenticationChallenge类封装了实现NSURLProtocol协议需要的信息:证书,受保护空间,证书认证遇到的错误,认证次数。NSURLAuthenticationChallenge实例同时定义了认证需要的初始信息。这个初始对象,也就是sender必须遵循NSURLAuthentionChallengSender方法。

NSURLProtocol 的子类用NSURLAuthenticationChallenge实例告诉URL 载入系统是否需要认证。NSURLAuthenticationChallenge也给NSURLConnectionNSURLDownload提供方便的定制认证的支持。

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会发送NSHTTPCookieStorageCookiesChangedNotificationNSHTTPCookieStorageAcceptPolicyChangedNotification通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值