一、NSURLConnection實際上指的是Foundation中的一套組件,包括:NSURLRequest, NSURLResponse, NSURLProtocol, NSURLCache, NSHTTPCookie, NSURLCredentialStorage, 以及NSURLConnection。 二、NSURLRequest封裝了一個實際的請求,保存發送給服務器的全部數據,包括URL,請求頭,方法等。 Connection對象負責發送一個request請求,創建與服務器的連接並收集來自服務器的數據。 三、請求被髮送前,先訪問共享的緩存,而後服務器能夠發出驗證,而後經過共享的cookie,證書或鏈接委託自動處理。緩存
以上是NSURLConnection的一些概覽。安全
與Connection相比,Session的改善有:服務器
一、可單獨配置每一個會話的緩存、協議、cookie、證書策略、甚致跨應用共享。 二、能夠在後臺使用。cookie
一、與以前相同的組件如: NSURLRequest、NSURLCache。 二、NSURLConnection被替換爲NSURLSession,NSURLSessionConfiguration,NSURLSessionTask。網絡
sessionTask負責加載數據。它們共享session的委託。全部的任務都可以取消、暫停、恢復。任務應該使用session建立而不是直接使用init方法。 它包括三個子類:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。 當dataTask完成時,它具備關聯的數據。downloadTask完成時,它具備一個已下載文件的臨時路徑。 如下是簡易的使用方法:session
NSURL *URL = [NSURL URLWithString:@"http://example.com"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { // ... }]; [task resume];
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSData *data = ...; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) { // ... }]; [uploadTask resume];
configuration對象用於初始化session對象,定義了session如何產生請求,如訪問性能、cookie、安全性、緩存策略等。 配置只在初始化的時候被讀取一次,以後是不可變的。函數
configuration有三個構造函數分別用於三個別同的場景。性能
defaultSessionConfiguration: 這實際上與NSURLConnection的網絡協議棧是同樣的,它使用共享的默認網絡配置。code
ephemeralSessionConfiguration: 返回一個預設的場配置,沒有緩存、cookie或證書。視頻
backgroundSessionConfiguration: 建立一個後臺會話,能夠在應用程序掛起或退出的狀況下運行任務。
configuration的屬性:
HTTPAdditionalHeaders指定了默認的請求頭。
networkServiceType 對標準網絡流量、網絡電話、語音、視頻以及一個後臺進程應該使用的流量進行了區分。
allowsCellularAccess和discretionary 用於節省經過蜂窩網絡鏈接的帶寬。建議使用後臺傳輸的時候使用discretionary屬性,由於allowCellularAccess會把 wifi和電源可用性考慮在內。
timeoutIntervalForRequest和timeoutForResource 指定請求和資源超時時間。
HTTPMaximumConnectionsPerHost 指定鏈接到特定主機的鏈接數量。
HTTPCookieStorage 是被會話使用的cookie存儲。默認狀況下,NSHTTPCookieShorage的+ sharedHTTPCookieStorage會被使用,這與NSURLConnection是相同的。
HTTPCookieAcceptPolicy 決定了該會話應該接受從服務器發出的cookie的條件。
HTTPShouldSetCookies 指定了請求是否應該使用會話HTTPCookieStorage的cookie。
URLCredentialStorage 是會話使用的證書存儲。默認狀況下,NSURLCredentialStorage 的+ sharedCredentialStorage 會被使用使用,這與NSURLConnection是相同的。
TLSMaximumSupportedProtocol 和 TLSMinimumSupportedProtocol 肯定是否支持SSLProtocol版本的會話。
URLCache 是會話使用的緩存。默認狀況下,NSURLCache 的+ sharedURLCache 會被使用,這與NSURLConnection是相同的。