Cookies和自定義協(xié)議 <- URL會(huì)話編程指南

如果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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容