apple官方文档翻译:URL Loading System Programming Guide

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]


时间: 2024-11-12 06:34:59

apple官方文档翻译:URL Loading System Programming Guide的相关文章

URL loading system

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165-BCICJDHA The URL loading system includes classes that load URLs along with a number of important helper cla

iOS 8:iOS URL Loading System

源地址:http://fann.im/blog/2012/11/06/ios-url-loading-system/ iOS 整个网络请求系统分为这几部分: URL Loading: NSURLRequest / NSMutableURLRequest NSURLResponse / NSHTTPURLResponse NSURLConnection Cache Management NSURLCache NSCachedURLResponse Authentication and Creden

[Apple官方文档翻译]: NSURLSession Programming Guide

关于URL加载系统 这个文档描述了Foundation框架中的与URL交互的一些类和与服务器交互的标准互联网协议. 这些类统一称为URL加载系统. URL加载系统是一个一些类和协议组成的允许应用通过URL来访问内容的合集. 其中核心的类就是NSURL,它负责产生出URL和资源的位置. 为了支持这些类的运行,Foundation框架提供了很多类来使用,比如:加载内容,上传数据到服务器,管理cookie,控制返回数据缓存,处理凭证管理和认证. URL加载系统提供支持以下协议: 文件传输协议(ftp:

apple官方文档翻译:使用NSURLSession(二)

简单的代理类的接口 下面的代码片段基于清单1-1所示接口 清单1-1 #import <Foundation/Foundation.h> typedef void (^CompletionHandlerType)(); @interface MySessionDelegate : NSObject <NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadD

apple官方文档翻译:使用NSURLSession(一)

英文原文地址 使用NSURLSession NSURLSession和其相关的类提供了通过HTTP下载数据的API.该API提供了丰富的代理方法来支持信息身份认证,以及当app未运行时(比如,在iOS中,app挂起状态)的后台下载功能. 使用NSURLSession,客户端会创建一系列对话,每个会话都匹配一组相关的数据传输任务.例如,编码一个web浏览器,客户端可能需要为没一个标签或者窗口创建一个会话.对每个会话,客户端增加一系列任务,每个任务代表了指向一个特定URL得请求(或者HTTP重定向后

iOS CFNetwork Concepts CFNetwork概念 官方文档翻译(三)

原文地址:developer CFNetwork概念 CFNetwork是一个低级的.高性能的框架,使您能够详细的控制协议栈.BSD套接字是一个扩展,提供对象的标准套接字抽象API来简化任务,比如与FTP和HTTP服务器或沟通解决DNS主机.CFNetwork为基础,从主体上和理论上,BSD套接字. 正如CFNetwork依赖于BSD套接字,有大量的Cocoa类依赖CFNetwork(例如,NSURL).此外,Web工具包是一组Cocoa类在窗口中显示网页内容.这两个类是非常高的水平,实现大部分

Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(二) Flume Properties Property Name            Default  Description flume.called.from.service – If this property is specified then the

Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)

Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw stream of data flowing through the ingest pipeline is not desired behaviour in many production environments because this may result in leaking sensit

iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译

编号 iOS-Apple苹果官方文档翻译名称 博文链接地址 1 苹果API常用英语名词---iOS-Apple苹果官方文档翻译 http://www.cnblogs.com/ChenYilong/p/3495625.html 2 基本控件文档-UIWebView---iOS-Apple苹果官方文档翻译 http://www.cnblogs.com/ChenYilong/p/3556301.html 3 基本控件文档-UITextField属性---iOS-Apple苹果官方文档翻译 http:/