美文网首页
Apple Program Guide之URL加载系统

Apple Program Guide之URL加载系统

作者: BBH_Life | 来源:发表于2017-06-27 14:09 被阅读38次
    此文章是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加载系统提供了对使用下列协议获取资源的支持:

    • 文件传输协议(ftp://)
    • 超文本传输协议(http://)
    • 有加密编码的超文本传输协议(https://)
    • 本地文件URL(file://)
    • 数据URL(data://)

    它显然也可以使用用户系统偏好来支持代理服务器和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数据

    • 简单请求,使用NSURLSession接口来直接从一个NSURL对象来获取内容,内容可以是NSData对象或者是一个本地文件。
    • 更为复杂的请求——那些需要上传数据的请求。例子:提供一个NSURLRequest对象(或者它的可变子类:NSMutableURLRequest)给NSURLSession

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

    • 提供一个完成后处理代码块(completion handler block)。URL加载类在当它结束从服务器接受数据后会使用这个代码块。
    • 提供一个自定义代理。URL加载类在收到从源头来的数据后会周期性的使用你的代理方法。你的app是有责任来积累那些数据,如果需要的话。

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

    下载内容来作为一个文件

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

    • 简单请求:使用NSURLSession接口来直接获取来自一个NSURL对象的内容,不论是作为一个NSData对象或者本地文件。
    • 更为复杂的请求——那些需要上传数据的请求。例子:提供一个NSURLRequest对象(或者它的可变子类:NSMutableURLRequest)给NSURLSession
    笔记:通过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的总结都不会像这样了。

    相关文章

      网友评论

          本文标题:Apple Program Guide之URL加载系统

          本文链接:https://www.haomeiwen.com/subject/mgszqxtx.html