介绍
URL loading system的模块
- 基本类
- URL loading classes
- 辅助类
- protocol 协议支持
- authentication and credentials 认证和授权
- cookie storage 状态
- configuration management 配置
- cache management 缓存
URL Loading
In-memory block of data
- <font color = "gray">For simple requests, use the NSURLSession API to retrieve the contents from an NSURL object directly, either as an NSData object or as a file on disk</font>.
- 复杂一点的比如上传数据,提供一个NSURLRequest给NSURLSession or <font color = "green">NSURLConnection</font>.
返回数据的获取方式
- completion handler block。
- Provide a custom delegate。
返回结果包含了响应的数据,还包含了请求的数据,比如MIME type ,content length
Downloading Content as a File
- <font color = "gray">For simple requests, use the NSURLSession API to retrieve the contents from an NSURL object directly, either as an NSData object or as a file on disk.</font>
- 复杂一点的比如上传数据,提供一个NSURLRequest给NSURLSession or <font color = "green">NSURLDownload</font>.
NSURLDownload:
- it is available in iOS,
- 能在后台继续运行,当app崩溃,终止,暂停也可以呢。
Helper Classes
为URL加载系统提供额外的元数据
- NSURLRequest
- NSURLResponse
NSURLRequest
- 定义与特定协议相关的属性
- 规定使用本地cache的方式
- 当用NSURLConnection or NSURLDownload时,设置链接超时
一个request 初始化一个connetction or download之后,再改request也无济于事。
能够设置和获取:
- HTTP request body
- headers
- transfer method??
Response Metadata
返回内容可以分为两个部分:描述信息的元数据,和信息本身
只有元数据存储在NSURLResponse 对象中过的时候,通过各种URL发送的请求的数据才会以block或者delegate的方式交付给你的app
NSCachedURLResponse 包含了NSURLResponse对象。
Redirection and Other Request Changes
。。。
Authentication and Credentials
Credentials stored in persistent storage are kept in the user’s keychain and shared among all apps.
...
Cache Management
- NSURLCache 设置大小和disk中的位置,管理 NSCachedURLResponse对象集合
- NSCachedURLResponse 封装NSURLResponse对象(元数据??) 和URL content data ,NSCachedURLResponse提供额外uerInfo字典来存储自定义数据。
NSURLConnection 能够控制是否要缓存,缓存是佛只是在内存中运用
不是所有的协议都有response缓存,目前只有http,https
Cookie Storage
因为http是没有状态的,客户端用cookie来保存URL请求中的持久数据。URL loading system提供接口:
- 创建和管理cookie。
- 发送cookie作为请求的一部分
- 解释server的reponse的时候,还会要接收cookie
Protocol Support
URL loading system also allows your app to register your own classes to support additional application-layer networking protocols. You can also add protocol-specific properties to URL request and URL response objects