iOS 官方文档翻译iOS官方文档iOS文档翻译

Cookies和自定义协议 <- URL会话编程指南

2017-07-14  本文已影响22人  raingu24

如果app需要用编程的方式管理cookies,例如添加和删除cookies或确定哪个cookies会被采用,请阅读Cookie 存储。

如果app需要支持的基于URL的协议不被NSURL支持,你可以注册自己的自定义协议类来支持。更多内容,请阅读Protocol Support。

Cookie存储

由于HTTP协议的无状态本质,客户端经常使用cookies来提供跨URL请求的数据持久化存储。URL加载系统提供创建和管理cookies的接口,可以把cookies作为HTTP请求的一部分进行发送,也可以在与web服务器响应的交互时接收cookies。

NSHTTPCookie类封装了一个cookie,提供很多访问普通cookie属性的访问器。该类还提提供HTTP cookie 头部向NSHTTPCookie示例转换,以及NSHTTPCookie示例向NSURLRequest对象相应头部转换的功能。URL加载系统自动发送任何适合NSURLRequest对象的存储的cookies,除非请求指定不发送cookies。同样,NSURLResponse对象中返回的cookies符合当前cookie验收(acceptance)策略。

NSHTTPCookieStorage类提供管理NSHTTPCookie对象集合在所有app间共享的接口。

iOS 注意:在iOS中,cookie不能在app之间实现共享。

NSHTTPCookieStorage允许app指定cookie的接收策略。Cookie接收策略可以对cookie是否应该始终被接受、永不接受、或只从与主文档URL同一域处接受。

注意:在一个app中改变cookie接受策略,会影响所有其他运行的app的接受策略。

当其他app改变cookie存储或者cookie接受策略,NSHTTPCookieStorage会通过发送NSHTTPCookieManagerCookiesChangedNotification 和 NSHTTPCookieStorageAcceptPolicyChangedNotification 通知来通知.

更多信息,参见NSHTTPCookieStorage Class Reference 和 NSHTTPCookie Class Reference.

协议支持

URL加载系统允许客户端app扩展支持传输数据的协议,URL加载系统本身支持http, https, file, ftp, 和 data协议。

你可以通过子类化NSURLProtocol来实现自定义协议,然后使用NSURLProtocol类的方法registerClass:来给URL加载系统增加新类。当NSURLSession对象发起一个NSURLRequest对象的连接时,URL加载系统会按照注册的相反顺序来查询每一个注册类。对于canInitWithRequest: 消息返回YES的第一个类被用于处理请求。

如果你的自定义协议要为它的请求或响应要求额外的属性,你可以通过创建NSURLRequest,NSMutableURLRequest, 和 NSURLResponse 的类别来提供支持,这些类为这些属性提供访问器。NSURLProtocol类提供了在这些访问器中设置和获取属性值的方法。

当连接开始和完成时,URL加载系统可以响应NSURLProtocol实例的创建和释放。App应该永不直接创建NSURLProtocol的实例。

当NSURLProtocol子类是通过URL加载系统初始化的时,它提供遵守NSURLProtocolClient协议的客户端对象。NSURLProtocol子类从NSURLProtocolClient协议发送消息给客户端对象,以便在创建响应、接收数据、重定向到新URL、身份验证、以及完成加载的时候,告知URL加载系统。如果自定义协议支持身份验证,它必须遵守NSURLAuthenticationChallengeSender协议。

更多信息,参见NSURLProtocol Class Reference。

上一篇下一篇

猜你喜欢

热点阅读