通常如果需要以编程的方式来管理cookie,比如cookie的添加和删除,或者决定什么cookie能被接受。阅读“Cookie存储”;

如果app需要支持基于URL的协议,但是NSURL类并不能原生支持。那么我们可以注册自己自定义协议类,并让该类提供所需的支持。阅读“协议支持”。

Cookie存储

由于HTTP是无状态协议,客户端经常使用Cookie来提供跨URL请求的数据存储。URL loading system提供了创建和管理Cookie的接口,把发送Cookie作为HTTP请求的一部分,并在解析服务器响应时接收Cookie。

NSHTTPCookie用来封装Cookie,并为常见的Cookie属性提供访问途径。而且该类(NSHTTPCookie)还提供了HTTP Cookie首部到类(NSHTTPCookie)实例的相互转换(实例到首部的转换是通过NSURLRequest对象)。除非在NSURLRequest对象指定不发送Cookie数据时,其余情况下URL loading system会自动发送和适当地存储Cookie数据。同样地,会根据cookie的接收策略接收NSURLResponse对象中返回的cookie。

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

提示

在iOS中的Cookie并支持被所有app共享

协议支持

URL loading system允许客户端程序通过扩展协议的方式来支持传输数据。URL loading system原生支持http,https,file,ftp和data协议。

我们可以子类化NSURLProtocol来实现自定义协议,然后使用NSURLProtocol方法registerClass:来注册新类。当NSURLSession对象通过NSURLRequest对象来创建一个网络连接,URL loading system通过它们注册时顺序的逆序来查询每一个已注册的类(想像成栈的方式,先注册的后查询)。canInitWithRequest:方法第一个返回YES的类来处理网络请求。

如果我们自定义的协议在请求或者响应时需要额外的属性,我们可以为NSURLRequest,NSMutableURLRequest和NSURLResponse类创建一个Category来为那些额外的属性提供访问器。NSURLProtocol类为那些访问器提供了设置(set)和获取(get)属性值的方法。

当连接开始或者完成时,URL loading system需要负责NSURLProtocol实例的创建和销毁工作。

🌈🌈🌈 重要

因此我们不能显示地去创建NSURLProtocol实例。

如果URL loading system初始化了NSURLProtocol子类,它会提供一个符合NSURLProtocolClient协议的客户端对象,NSURLProtocol子类会把消息从NSURLProtocolClient协议发送给客户端对象,其目的是为了通知URL loading system来做创建响应、接收数据、重定向一个URL、处理身份认证和加载完成等相关动作。

⚠️⚠️⚠️ 提示

如果自定义的协议需要支持身份认证,它必须要实现NSURLAuthenticationChallengeSender协议。

关于自定义协议的例子见CustomHTTPProtocol

results matching ""

    No results matching ""