版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.03.10 |
前言
我們做APP發(fā)起網(wǎng)絡(luò)請求婉陷,一般都是使用框架牺丙,這些框架的底層也都是蘋果的API,接下來幾篇就一起來看一下和網(wǎng)絡(luò)有關(guān)的幾個類。感興趣的可以看上面幾篇文章孩锡。
1. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類 (一) —— NSURLSession
2. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(二) —— NSURLRequest和NSMutableURLRequest
3. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(三) —— NSURLConnection
4. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(四) —— NSURLSession和NSURLConnection的區(qū)別
關(guān)于URL加載系統(tǒng)
本指南介紹了可用于與URL進行交互以及使用標準Internet協(xié)議與服務(wù)器進行通信的Foundation框架類。這些類一起被稱為URL加載系統(tǒng)周拐。
URL加載系統(tǒng)是一組允許您的應(yīng)用訪問由URL引用的內(nèi)容的類和協(xié)議涡戳。這項技術(shù)的核心是NSURL
類,它可以讓你的應(yīng)用程序操縱URL和它們引用的資源或听。
為了支持這個類涕俗,F(xiàn)oundation框架提供了豐富的類集合,讓您可以加載URL的內(nèi)容神帅,上傳數(shù)據(jù)到服務(wù)器再姑,管理cookie存儲,控制響應(yīng)緩存找御,以APP指定的方式處理憑??證存儲和認證元镀,并編寫自定義協(xié)議擴展。
URL加載系統(tǒng)為使用以下協(xié)議訪問資源提供支持:
- 文件傳輸協(xié)議
(ftp://)
- 超文本傳輸??協(xié)議
(http://)
- 帶加密的超文本傳輸??協(xié)議
(https://)
- 本地文件網(wǎng)址
(file:///)
- 數(shù)據(jù)網(wǎng)址
(data://)
它還使用用戶的系統(tǒng)偏好明顯的支持代理服務(wù)器和SOCKS網(wǎng)關(guān)霎桅。
重要:在Apple平臺上栖疑,名為
App Transport Security(ATS)
的網(wǎng)絡(luò)安全功能可用于應(yīng)用和應(yīng)用擴展,并且默認情況下處于啟用狀態(tài)滔驶。 它通過確保您的應(yīng)用程序的網(wǎng)絡(luò)連接僅使用行業(yè)標準協(xié)議和沒有已知弱點的密碼來提高隱私和數(shù)據(jù)完整性遇革。有關(guān)更多信息,請參閱NSAppTransportSecurity揭糕。
注意:除了URL加載系統(tǒng)之外萝快,OS X和iOS還提供了用于在其他應(yīng)用程序(如Safari)中打開URL的API。 這些API在文檔中沒有描述著角。
- 有關(guān)OS X中的啟動服務(wù)的更多信息揪漩,請閱讀Launch Services Programming Guide。
- 有關(guān)OS X中
NSWorkSpace
類中的openURL:
方法的更多信息吏口,請閱讀NSWorkspace Class Reference奄容。 - 有關(guān)iOS中
UIApplication
類中的openURL:
方法的更多信息冰更,請參閱UIApplication Class Reference。
概覽
URL加載系統(tǒng)包括加載URL的類以及與這些URL加載類一起工作以修改其行為的許多重要幫助類昂勒。 主要的幫助類分為五類:協(xié)議支持蜀细,認證和憑證,cookie存儲戈盈,配置管理和緩存管理protocol support, authentication and credentials, cookie storage, configuration management, cache management
奠衔。
1. URL Loading - URL 加載
URL加載系統(tǒng)中最常用的類允許您的應(yīng)用從源中檢索URL的內(nèi)容。 您可以使用NSURLSession
檢索該內(nèi)容奕谭。 您使用的具體方法很大程度上取決于您是要將數(shù)據(jù)提取到內(nèi)存還是將其下載到磁盤涣觉。
Fetching Content as Data (In Memory) - 獲取內(nèi)容作為數(shù)據(jù)(在內(nèi)存中)
在較高層次上,有兩種基本的方法來獲取URL數(shù)據(jù):
對于簡單的請求血柳,可以使用
NSURLSession
API直接從NSURL
對象中檢索內(nèi)容官册,既可以作為NSData對象,也可以作為磁盤上的文件难捌。對于更復(fù)雜的請求 - 例如上傳數(shù)據(jù)的請求 - 向
NSURLSession
提供NSURLRequest
對象(或其可變子類膝宁,NSMutableURLRequest
)。
無論您選擇哪種方式根吁,您的應(yīng)用程序都可以通過兩種方式獲取響應(yīng)數(shù)據(jù):
提供完成處理程序塊员淫。 URL加載類在完成從服務(wù)器接收數(shù)據(jù)時調(diào)用該塊。
提供一個自定義代理击敌。 URL加載類會在接收源數(shù)據(jù)時定期調(diào)用您的委托方法介返。 如果需要,您的應(yīng)用程序負責積累該數(shù)據(jù)沃斤。
除了數(shù)據(jù)本身之外圣蝎,URL加載類還為您的代理或完成處理程序塊提供了封裝與請求關(guān)聯(lián)的元數(shù)據(jù)(例如MIME類型和內(nèi)容長度)的響應(yīng)對象。
相關(guān)章節(jié):Using NSURLSession
Downloading Content as a File - 將內(nèi)容作為文件下載
在較高層次上衡瓶,有兩種基本方法可將URL的內(nèi)容下載到文件中:
對于簡單的請求徘公,可以使用
NSURLSession
API直接從NSURL
對象中檢索內(nèi)容,既可以作為NSData對象哮针,也可以作為磁盤上的文件关面。對于更復(fù)雜的請求 - 例如上傳數(shù)據(jù)的請求 - 向
NSURLSession
提供NSURLRequest
對象(或其可變子類,NSMutableURLRequest
)十厢。
注意:由
NSURLSession
實例啟動的下載不會被緩存等太。 如果您需要緩存結(jié)果,您的應(yīng)用程序必須使用NSURLSession并將數(shù)據(jù)寫入磁盤本身寿烟。
相關(guān)章節(jié):Using NSURLSession
2. Helper Classes - 輔助類
URL加載類使用兩個輔助類澈驼,它們提供附加的元數(shù)據(jù) - 一個用于請求本身(NSURLRequest
),另一個用于服務(wù)器的響應(yīng)(NSURLResponse
)筛武。
URL Requests - URL請求
NSURLRequest
對象以獨立于協(xié)議的方式封裝URL和任何協(xié)議特定的屬性缝其。
注意:當客戶端應(yīng)用程序使用NSMutableURLRequest
的實例啟動連接或下載時,會對請求進行深層復(fù)制徘六。 初始化下載后内边,對啟動請求所做的更改不起作用。
一些協(xié)議支持協(xié)議指定的屬性待锈。 例如漠其,HTTP協(xié)議將方法添加到NSURLRequest
中,以返回HTTP請求正文竿音,頭和請求方法和屎。 它還向NSMutableURLRequest
添加方法來設(shè)置這些值。
本書通篇描述了使用URL請求對象的細節(jié)春瞬。
Response Metadata - 響應(yīng)元數(shù)據(jù)
從服務(wù)器到請求的響應(yīng)可以被看作兩部分:描述內(nèi)容和內(nèi)容數(shù)據(jù)本身的元數(shù)據(jù)柴信。 大多數(shù)協(xié)議通用的元數(shù)據(jù)由NSURLResponse
類封裝,包含MIME類型宽气,預(yù)期內(nèi)容長度随常,文本編碼(如果適用)以及提供響應(yīng)的URL。 NSURLResponse
的特定于協(xié)議的子類可以提供額外的元數(shù)據(jù)萄涯。 例如绪氛, NSHTTPURLResponse存儲由Web服務(wù)器返回的標題頭和狀態(tài)代碼。
重要提示:只有響應(yīng)的元數(shù)據(jù)存儲在
NSURLResponse
對象中涝影。 各種URL加載類通過完成處理程序塊或?qū)ο蟠韺㈨憫?yīng)數(shù)據(jù)本身提供給您的應(yīng)用程序枣察。
NSCachedURLResponse實例封裝NSURLResponse對象,URL內(nèi)容數(shù)據(jù)以及您的應(yīng)用程序提供的任何其他信息燃逻。 詳情請參閱Cache Management序目。
本書通篇描述了使用URL響應(yīng)對象的細節(jié)。
3. Redirection and Other Request Changes - 重定向和其他請求更改
某些協(xié)議(如HTTP)為服務(wù)器提供了一種方式唆樊,告訴您的應(yīng)用程序內(nèi)容已移至不同的URL宛琅。 URL加載類可以在發(fā)生這種情況時通知他們的代理。 如果您的應(yīng)用程序提供了適當?shù)奈蟹椒ǘ号裕瑒t您的應(yīng)用程序可以決定是否遵循重定向嘿辟,從重定向返回響應(yīng)主體,或返回錯誤片效。
相關(guān)章節(jié):Handling Redirects and Other Request Changes
4. Authentication and Credentials - 身份驗證和憑證
某些服務(wù)器限制對特定內(nèi)容的訪問红伦,要求用戶通過提供某種證書(客戶端證書,用戶名和密碼等)進行身份驗證才能獲得訪問權(quán)限淀衣。在Web服務(wù)器的情況下昙读,受限制的內(nèi)容被分組到需要一組憑證的領(lǐng)域。憑證(特別是證書)也用于確定另一方向的信任 - 評估您的應(yīng)用是否應(yīng)該信任服務(wù)器膨桥。
URL加載系統(tǒng)提供模型憑證和受保護區(qū)域的類以及提供安全的憑證持久性蛮浑。您的應(yīng)用可以指定這些憑據(jù)在單個請求唠叛,應(yīng)用啟動期間或永久保存在用戶的鑰匙串中時保留。
注意:存儲在持久性存儲中的憑證保存在用戶的鑰匙串中沮稚,并在所有應(yīng)用程序中共享艺沼。
NSURLCredential類封裝由認證信息(例如用戶名和密碼)和持久性行為組成的憑證。 NSURLProtectionSpace類表示需要特定憑證的區(qū)域蕴掏。保護空間可以限制為單個URL障般,包含Web服務(wù)器上的領(lǐng)域或引用代理。
NSURLCredentialStorage對象管理會話的憑證存儲盛杰,并提供NSURLCredential
對象與其提供身份驗證的相應(yīng)NSURLProtectionSpace
對象的映射挽荡。只有身份驗證質(zhì)詢成功時才會存??儲憑證。
NSURLAuthenticationChallenge類封裝了NSURLProtocol實現(xiàn)為驗證請求所需的信息:建議的憑證即供,涉及的保護空間定拟,協(xié)議用于確定需要驗證的錯誤或響應(yīng),以及已完成的驗證嘗試次數(shù)募狂。 NSURLAuthenticationChallenge
實例還指定啟動身份驗證的對象办素。發(fā)起對象(稱為發(fā)送者)必須符合NSURLAuthenticationChallengeSender
協(xié)議。
NSURLAuthenticationChallenge
實例被NSURLProtocol
子類用于通知URL加載系統(tǒng)需要認證祸穷。它們也提供給NSURLSession
的委托方法性穿,以方便定制認證處理。
相關(guān)章節(jié):Authentication Challenges and TLS Chain Validation
5. Cache Management - 內(nèi)存管理
URL加載系統(tǒng)提供了一個磁盤和內(nèi)存中緩存雷滚,允許應(yīng)用程序減少對網(wǎng)絡(luò)連接的依賴需曾,并為以前緩存的響應(yīng)提供更快的周轉(zhuǎn)時間呆万。緩存存儲在每個應(yīng)用程序的基礎(chǔ)上。 NSURLSession
根據(jù)啟動NSURLRequest
和NSURLSessionConfiguration
對象指定的緩存策略來查詢緩存。
NSURLCache類提供了一些方法來配置緩存大小及其在磁盤上的位置严就。它還提供了管理包含緩存響應(yīng)的NSCachedURLResponse對象集合的方法器罐。
NSCachedURLResponse
對象封裝NSURLResponse
對象和URL內(nèi)容數(shù)據(jù)。 NSCachedURLResponse
還提供了一個用戶信息字典铸董,您的應(yīng)用可以使用它來緩存任何自定義數(shù)據(jù)旁理。
并非所有的協(xié)議實現(xiàn)都支持響應(yīng)緩存。目前只有http和https請求被緩存。
NSURLSession對象可以通過實現(xiàn)URLSession:dataTask:willCacheResponse:completionHandler:delegate
方法來控制是否緩存響應(yīng)以及是否應(yīng)該僅在內(nèi)存中緩存響應(yīng)。
相關(guān)章節(jié):Understanding Cache Access
6. Cookie Storage - Cookie存儲
由于HTTP協(xié)議的無狀態(tài)特性豌习,客戶端通常使用Cookie來提供跨URL請求的持久數(shù)據(jù)存儲。 URL加載系統(tǒng)提供接口來創(chuàng)建和管理cookie,發(fā)送cookie作為HTTP請求的一部分,并在解釋web服務(wù)器的響應(yīng)時接收cookie矾屯。
OS X和iOS提供了NSHTTPCookieStorage類件蚕,該類又提供了管理NSHTTPCookie對象集合的接口。 在OS X中拌夏,所有應(yīng)用程序共享cookie存儲; 在iOS中,Cookie存儲是按應(yīng)用程序進行的栅迄。
相關(guān)章節(jié):Cookie Storage
7. Protocol Support - 協(xié)議支持
URL加載系統(tǒng)本身支持http,https,file作瞄,ftp和data協(xié)議。 但是析二,URL加載系統(tǒng)還允許您的應(yīng)用程序注冊您自己的類以支持其他應(yīng)用程序?qū)泳W(wǎng)絡(luò)協(xié)議粉洼。 您還可以將協(xié)議指定的屬性添加到URL請求和URL響應(yīng)對象。
相關(guān)章節(jié):Cookies and Custom Protocols
如何使用本文檔
首先閱讀Using NSURLSession概述URL加載系統(tǒng)叶摄。 然后閱讀Life Cycle of a URL Session以詳細了解NSURLSession
如何與其代理進行交互属韧。 有關(guān)URL加載系統(tǒng)其他方面的更多信息將在以下章節(jié)中提供:
- Encoding URL Data 解釋了如何對任意字符串進行編碼以使其可以安全地在URL中使用。
- Handling Redirects and Other Request Changes描述了用于響應(yīng)URL請求更改的選項蛤吓。
- Authentication Challenges and TLS Chain Validation描述了通過安全服務(wù)器驗證連接的過程宵喂。
- Understanding Cache Access 描述了連接在請求期間如何使用緩存。
- Cookies and Custom Protocols 解釋了可用于管理Cookie存儲和支持自定義應(yīng)用層協(xié)議的類会傲。
后記
本篇主要介紹了關(guān)于URL系統(tǒng)這個蘋果框架的概覽和描述锅棕,包括URL加載系統(tǒng)的各個組成部分。