標籤:
URL Loading System Programming Guide
(本文為概要描述,部分有刪減)
原文連結
關於
本指南描述了使用標準Internet協議來處理Urls、與伺服器通訊的相關類。
URL Loading System包含了一系列類和協議,來支援app訪問URL上的內容。核心類是NSURL,協助app來控制URL以及該URL指向的內容。
為了支援NSURL,apple的Foundation framework提供了豐富的類來協助你載入URL的內容,從伺服器更新資料,管理cookie儲存,控制緩衝,在app上處理認證和認證方式,以及擴充使用者協議。
URL Loading System支援通過以下協議來訪問資源:
- FTP協議(ftp://)
- 超文字傳輸通訊協定 (HTTP)(http://)
- 加密超文字傳輸通訊協定 (HTTP)(https://)
- 本地資源(file://)
- 資料URLs(data://)
顯然,它也支援Proxy 伺服器和使用者系統設定的SOCKS網關(?)。
提示:此外,OS X和iOS在其他應用中也提供了開啟URLs的APIs,例如Safari.這些APIs不包含在本文檔中.*For more information about Launch Services in OS X, read Launch Services Programming Guide. *For more information about the openURL: method in the NSWorkSpace class in OS X, read NSWorkspace Class Reference. *For more information about the openURL: method in the UIApplication class in iOS, read UIApplication Class Reference.
概述
URL loading system包含了大量輔助類來協助處理URLs.主要可分為五大類:協議支援,認證認證,cookie儲存,組態管理和緩衝管理.
載入URL
URL loading system中最常用的類允許app從源URL中檢索內容.根據不同app的需求,可以選擇不同的檢索方式.如何選取合適的API取決於你的OSX版本或者iOS app的目標版本,以及取得資料的類型,檔案或者是一塊記憶體:
* iOS7以上版本,或者OSX v10.9以上版本中,應優先使用NSURLSession來處理URL請求.
* 如果必須支援OSX舊版本,可以選擇NSURLDownload來下載URL中的內容並儲存到硬碟中.
* 如果必須支援iOS或者OSX的舊版本,可以使用NSURLConnection下載內容並儲存到記憶體中,需要的話,也可以將資料寫入硬碟.
如何選取合適的方法主要取決於你想把資料儲存到記憶體中還是硬碟中.
擷取資料內容到記憶體中
在較高水平上,有兩種基本方式來載入URL:
- 對簡單請求,直接使用NSURLSession來從一個NSURL對象檢索內容,無論結果是一個NSData對象還是一個磁碟檔案.
- 對複雜一點的請求,比如上傳資料,使用NSURLSession或者NSURLConnection來載入一個NSURLRequest,或者其子類NSMutableURLRequest.
無論使用哪種方式,app能通過下面兩種方法獲得響應資料:
- 一個完成處理的block.當載入URL的類從伺服器接收完資料後會調用這個block.
- 一個自訂的delegate.當URL載入類從伺服器擷取資料時,會周期性的調用其代理方法.如果必要,app可以負責不斷累計獲得資料.
此外,對資料本身來說,URL載入類給以上的block和delegate都提供了一個與請求相關的響應對象(壓縮的中繼資料),比如MIME和內容長度.
相關章節:Using NSURLSession Using NSURLConnection
以檔案形式下載資料
同樣有兩種基本方式,來以檔案形式從一個URL下載內容:
- 對簡單請求,直接使用NSURLSession來從一個NSURL對象檢索內容,無論結果是一個NSData對象還是一個磁碟檔案.
- 對複雜一點的請求,比如上傳資料,使用NSURLSession或者NSURLDownload來載入一個NSURLRequest,或者其子類NSMutableURLRequest.
NSURLSession相比於NSURLDownload有兩個顯著優點:它可以在iOS上使用,而且即使是當應用程式當掛起,退出,閃退時,依然能在後台進行資料下載.
提示:通過NSURLDownload或者NSURLSession進行的下載是沒有緩衝的,如果需要緩衝下載結果,必須使用NSURLConnection或者NSURLSession,並且由開發人員自己將資料寫入磁碟.
相關章節:Using NSURLDownload Using NSURLSession
輔助類
URL載入類使用兩個具體的載入類提供額外的資料:一個是針對請求本身(NSURLRequest),一個是針對伺服器的響應(NSURLResponse).
URL請求
一個NSURLRequest對象封裝了一個URL以及相應的協議資訊,也指定了本機快取策略.當使用NSURLConnection和NSURLDownload,還可以設定其逾時時間(NSURLSession的逾時在per-session basis中配置).
提示:當用戶端app使用一個NSMutableURLRequest對象向伺服器發起串連或者下載時,request會進行深拷貝,在下載初始化完成後修改request不會影響之前的設定.
一些協議支援設定其特有的屬性.比如HTTP協議,在NSURLRequest中加入了返回HTTP請求體,要求標頭的方法以及轉換方法.同樣NSMutableURLRequest也加入了這些方法.
響應資料
伺服器對一個請求的響應資料可以分為兩部分:內容資料本身和其描述.通常協議的中繼資料被封裝在NSURLResponse中,而且包含了MIME類型,預期資料大小,文本編碼類別型,以及請求的URL.NSURLResponse特定協議的子類可以提供更多的額外資訊,比如NSHTTPURLResponse儲存了伺服器返回的回應標頭和狀態代碼.
提示:NSURLResponse對象中只儲存了響應的中繼資料.其他的URL載入類通過block或代理提供響應資料.一個NSCachedURLResponse執行個體包含一個NSURLResponse對象,URL內容資料以及其他額外資訊,參見後文Cache Management .
重新導向和其他請求變化
一些協議,比如HTTP,當目標URL遷移時會通過某種方式通知用戶端.當這種情況發生時,URL載入類會通知其代理.如果你的app實現了對應的代理方法,你可以選擇重新請求定向後的地址還是返回一個錯誤資訊.
相關章節:Handling Redirects and Other Request Changes
認證和認證
一些伺服器會限制存取權限,除非你提供相應的認證資訊.從伺服器的角度來看,限制內容被分組到一個集合,需要單獨的一套認證.認證也可以被用來確認訪問的伺服器是不是可信的.
提示:認證永久儲存在使用者鑰匙串中,所有app公用.
緩衝管理
The URL loading system提供了磁碟緩衝和記憶體緩衝來減少app對網路的依賴,並加快載入速度.
cookie管理
由於HTTP協議的無狀態特性,客戶經常使用cookie來提供持久儲存資料的URL請求。URL載入系統提供介面來建立和管理cookie,把cookie作為HTTP請求的一部分,並接收cookie時解釋web伺服器的響應。
協議支援
URL載入系統本身支援http,https,file,ftp和data協議。然而,URL載入系統還允許應用程式註冊你自己的類已支援額外的應用程式層網路通訊協定。您還可以在URL請求和響應對象中添加特定的協議屬性。
轉載請註明出處:http://blog.csdn.net/qq329735967
任何疑問歡迎Email至[email protected]
apple官方文檔翻譯:URL Loading System Programming Guide