如果app需要用編程的方式管理cookies,例如添加和刪除cookies或確定哪個(gè)cookies會(huì)被采用,請(qǐng)閱讀Cookie 存儲(chǔ)。
如果app需要支持的基于URL的協(xié)議不被NSURL支持,你可以注冊(cè)自己的自定義協(xié)議類(lèi)來(lái)支持。更多內(nèi)容,請(qǐng)閱讀Protocol Support。
Cookie存儲(chǔ)
由于HTTP協(xié)議的無(wú)狀態(tài)本質(zhì),客戶(hù)端經(jīng)常使用cookies來(lái)提供跨URL請(qǐng)求的數(shù)據(jù)持久化存儲(chǔ)。URL加載系統(tǒng)提供創(chuàng)建和管理cookies的接口,可以把cookies作為HTTP請(qǐng)求的一部分進(jìn)行發(fā)送,也可以在與web服務(wù)器響應(yīng)的交互時(shí)接收cookies。
NSHTTPCookie類(lèi)封裝了一個(gè)cookie,提供很多訪問(wèn)普通cookie屬性的訪問(wèn)器。該類(lèi)還提提供HTTP cookie 頭部向NSHTTPCookie示例轉(zhuǎn)換,以及NSHTTPCookie示例向NSURLRequest對(duì)象相應(yīng)頭部轉(zhuǎn)換的功能。URL加載系統(tǒng)自動(dòng)發(fā)送任何適合NSURLRequest對(duì)象的存儲(chǔ)的cookies,除非請(qǐng)求指定不發(fā)送cookies。同樣,NSURLResponse對(duì)象中返回的cookies符合當(dāng)前cookie驗(yàn)收(acceptance)策略。
NSHTTPCookieStorage類(lèi)提供管理NSHTTPCookie對(duì)象集合在所有app間共享的接口。
iOS 注意:在iOS中,cookie不能在app之間實(shí)現(xiàn)共享。
NSHTTPCookieStorage允許app指定cookie的接收策略。Cookie接收策略可以對(duì)cookie是否應(yīng)該始終被接受、永不接受、或只從與主文檔URL同一域處接受。
注意:在一個(gè)app中改變cookie接受策略,會(huì)影響所有其他運(yùn)行的app的接受策略。
當(dāng)其他app改變cookie存儲(chǔ)或者cookie接受策略,NSHTTPCookieStorage會(huì)通過(guò)發(fā)送NSHTTPCookieManagerCookiesChangedNotification 和 NSHTTPCookieStorageAcceptPolicyChangedNotification 通知來(lái)通知.
更多信息,參見(jiàn)NSHTTPCookieStorage Class Reference 和 NSHTTPCookie Class Reference.
協(xié)議支持
URL加載系統(tǒng)允許客戶(hù)端app擴(kuò)展支持傳輸數(shù)據(jù)的協(xié)議,URL加載系統(tǒng)本身支持http, https, file, ftp, 和 data協(xié)議。
你可以通過(guò)子類(lèi)化NSURLProtocol來(lái)實(shí)現(xiàn)自定義協(xié)議,然后使用NSURLProtocol類(lèi)的方法registerClass:來(lái)給URL加載系統(tǒng)增加新類(lèi)。當(dāng)NSURLSession對(duì)象發(fā)起一個(gè)NSURLRequest對(duì)象的連接時(shí),URL加載系統(tǒng)會(huì)按照注冊(cè)的相反順序來(lái)查詢(xún)每一個(gè)注冊(cè)類(lèi)。對(duì)于canInitWithRequest: 消息返回YES的第一個(gè)類(lèi)被用于處理請(qǐng)求。
如果你的自定義協(xié)議要為它的請(qǐng)求或響應(yīng)要求額外的屬性,你可以通過(guò)創(chuàng)建NSURLRequest,NSMutableURLRequest, 和 NSURLResponse 的類(lèi)別來(lái)提供支持,這些類(lèi)為這些屬性提供訪問(wèn)器。NSURLProtocol類(lèi)提供了在這些訪問(wèn)器中設(shè)置和獲取屬性值的方法。
當(dāng)連接開(kāi)始和完成時(shí),URL加載系統(tǒng)可以響應(yīng)NSURLProtocol實(shí)例的創(chuàng)建和釋放。App應(yīng)該永不直接創(chuàng)建NSURLProtocol的實(shí)例。
當(dāng)NSURLProtocol子類(lèi)是通過(guò)URL加載系統(tǒng)初始化的時(shí),它提供遵守NSURLProtocolClient協(xié)議的客戶(hù)端對(duì)象。NSURLProtocol子類(lèi)從NSURLProtocolClient協(xié)議發(fā)送消息給客戶(hù)端對(duì)象,以便在創(chuàng)建響應(yīng)、接收數(shù)據(jù)、重定向到新URL、身份驗(yàn)證、以及完成加載的時(shí)候,告知URL加載系統(tǒng)。如果自定義協(xié)議支持身份驗(yàn)證,它必須遵守NSURLAuthenticationChallengeSender協(xié)議。
更多信息,參見(jiàn)NSURLProtocol Class Reference。