Apple Program Guide之URL加载系统

2017-06-27  本文已影响38人  BBH_Life
此文章是Apple Program Guide中URL Session Programming Guide的重点翻译,有很多加入了自己的理解,有一些自认为没那么重要的话并没有加入,但是不影响大家对URL系统的理解,如有瑕疵,请大家指正。
原文路径为:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html

关于URL加载系统

这个引导讨论了基础框架中能够与URLs产生互动并能使用标准互联网协议与服务器沟通的类。这些类一起组成了URL loading system。
URL加载系统是一个类和协议的集合,它可以使得你的APP通过一个URL来获取其链接的内容。这个技术的核心是NSURL类,这个类可以让你的APP对URL和其链接的内容进行操作。
为了支持这个类(NSURL),基础框架提供了一个丰富的类库来让你加载一个URL链接的内容,上传数据到服务器,整理cookie存储,控制返回缓存,使用APP独有方式处理credential存储和验证,还可以写自定义的协议扩展等。
URL加载系统提供了对使用下列协议获取资源的支持:

它显然也可以使用用户系统偏好来支持代理服务器和SOCKS gateways

重要:在Apple的平台中,一个网络安全特性被称作为App Transport Security(ATS),这个特性可以被app和app扩展使用,并且是默认可用的。它可以通过保证你app的网络链接只使用标准的网络协议和没有已知漏洞的密码来提高私密性和数据完整性。更多信息:https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
笔记:作为对URL加载系统的附加,OS X和iOS为在其他应用中打开URL提供了接口,这些接口没有在本文中讨论,

At a Glance(小撇一眼)

URL加载系统包含了独立加载URL的类和一些重要的帮助类,帮助类与URL加载类一起工作来修改URL加载类的行为。主要的帮助类分为五个类别:协议支持,授权和证书,cookie存储,配置管理和缓存管理。

nsobject_hierarchy.png

URL加载

在URL加载系统中大多数被使用的类都允许你的app从一个URL获取其内容。你可以使用NSURLSession获取其内容。具体你使用的方法很大程度取决于你是想获取数据到内存中还是保存到硬盘中。

以数据到形式(Data)获取内容到内存中

在一个高的层次,有两种基础的方式来获取URL数据

不论用什么方式,你的app可以通过以下两种方法获取返回的数据:

作为对数据本身的附加,URL加载类提供给你的代理或者完成后处理代码块一个责任对象,这个责任对象包括与请求相关的元数据,包括MIME类型和内容长度。

下载内容来作为一个文件

在一个高层次,有两种基础方式来下载URL的内容来作为文件:

笔记:通过NSURLSession开始的下载不会被自动缓存,如果你要缓存结果,你的app必须要使用NSURLSession并将数据保存到硬盘中。

帮助类

URL加载类使用两个帮助类来提供额外的元数据——一个针对请求本身(NSURLRequest)另一个针对服务返回数据(NSURLResponse

URL Request

一个NSURLRequest对象囊括了一个URL和具体协议的属性,以一种协议独立的方式。

笔记:当一个远端app使用一个NSMutableURLRequest实例来发起一个连接或者下载,一个此请求的深复制就被创建了。这个请求接下来的一些改变不会影响之前已经发起的下载。

一些协议支持协议具体属性(protocal-specific properties)。例如:HTTP协议在HNSURLRequest中添加了方法,这些方法返回HTTP请求主体,头,和传输方式。它也在NSMutableURLRequest中添加了方法来设置这些值。
这些具体的细节超出了本文的讨论范围。

返回元数据

从服务器到请求的响应可以被视为两部分:描述内容和内容数据本身的元数据。 大多数协议通用的元数据由NSURLResponse类封装,由MIME类型,预期内容长度,文本编码(如适用)和提供响应的URL组成。 NSURLResponse的协议特定子类可以提供额外的元数据。 例如,NSHTTPURLResponse存储Web服务器返回的头文件和状态代码。

重要:只有返回的元数据保存在NSURLResponse对象中。多个URL加载类通过Block或者代理的方式提供返回数据本身给你的app。

一个NSCachedURLResponse实例囊括NSURLResponse对象,URL内容数据,和一些你的app提供的额外的信息。更多细节:Cache Management

等待后续

写到这里已经快将URLSession的架构给覆盖了,但是有很多的细节没有涉及,而且在写作过程中感觉过于原生,有一些不太重要的东西写出来太浪费时间,所以在之后的Program Guide的总结都不会像这样了。

上一篇下一篇

猜你喜欢

热点阅读