作用:可以統一配置NSURLSession,如請求超時等
創建配置的三種方式
+ (NSURLSessionConfiguration *)defaultSessionConfiguration; //返回標准配置,這實際上與NSURLConnection的網絡協議棧是一樣的,具有相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage。
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration; //返回一個預設配置,沒有持久性存儲的緩存,Cookie或證書。這對於實現像"秘密瀏覽"功能的功能來說,是很理想的。
+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier NS_AVAILABLE(10_10, 8_0); //獨特之處在於,它會創建一個后台會話。后台會話不同於常規的,普通的會話,它甚至可以在應用程序掛起,退出,
崩潰的情況下運行上傳和下載任務。初始化時指定的標識符,被用於向任何可能在進程外恢復后台傳輸的守護進程提供上下文。
重要的屬性:
# 替代 request 中的 forHTTPHeaderField 告訴服務器有關客戶端的附加信息
"HTTPAdditionalHeaders"指定了一組默認的可以設置出站請求的數據頭。這對於跨會話共享信息,如內容類型,語言,用戶代理,身份認證,是很有用的。
# WebDav的身份驗證
NSString *userPasswordString = [NSString stringWithFormat:@"%@:%@", user, password];
NSData * userPasswordData = [userPasswordString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64EncodedCredential = [userPasswordData base64EncodedStringWithOptions:0];
NSString *authString = [NSString stringWithFormat:@"Basic: %@", base64EncodedCredential];
# 設置客戶端類型
NSString *userAgentString = @"iPhone AppleWebKit";
configuration.HTTPAdditionalHeaders = @{@"Accept": @"application/json",
@"Accept-Language": @"en",
@"Authorization": authString,
@"User-Agent": userAgentString};
"networkServiceType(網絡服務類型)"對標准的網絡流量,網絡電話,語音,視頻,以及由一個后台進程使用的流量進行了區分。大多數應用程序都不需要設置這個
"allowsCellularAccess(允許蜂窩訪問)"和"discretionary(自行決定)"被用於節省通過蜂窩連接的帶寬。建議在使用后台傳輸的時候,使用discretionary屬性,
而不是allowsCellularAccess屬性,因為它會把WiFi和電源可用性考慮在內
"timeoutIntervalForRequest"和"timeoutIntervalForResource"指定了請求以及該資源的超時時間間隔。許多開發人員試圖使用timeoutInterval去限制發送請求的總時間,但這誤會了timeoutInterval的意思:報文之間的時間。timeoutIntervalForResource實際上提供了整體超時的特性,這應該只用於后台傳輸,而不是用戶實際上可能想要等待的任何東西
"HTTPMaximumConnectionsPerHost"是 Foundation 框架中URL加載系統的一個新的配置選項。它曾經被用於NSURLConnection管理私人連接池。現在有了NSURLSession,開發者可以在需要時限制連接到特定主機的數量
"HTTPShouldUsePipelining"也出現在NSMutableURLRequest,它可以被用於開啟HTTP管道,這可以顯着降低請求的加載時間,但是由於沒有被服務器廣泛支持,默認是禁用的
"sessionSendsLaunchEvents" 是另一個新的屬性,該屬性指定該會話是否應該從后台啟動
"connectionProxyDictionary"指定了會話連接中的代理服務器。同樣地,大多數面向消費者的應用程序都不需要代理,所以基本上不需要配置這個屬性
關於連接代理的更多信息可以在 CFProxySupport Reference 找到。
"Cookie Policies"
-"HTTPCookieStorage" 是被會話使用的cookie存儲。默認情況下,NSHTTPCookieShorage的 + sharedHTTPCookieStorage會被使用,這與NSURLConnection是相同的
-"HTTPCookieAcceptPolicy" 決定了該會話應該接受從服務器發出的cookie的條件
-"HTTPShouldSetCookies" 指定了請求是否應該使用會話HTTPCookieStorage的cookie
"Security Policies"
URLCredentialStorage 是會話使用的證書存儲。默認情況下,NSURLCredentialStorage 的+ sharedCredentialStorage 會被使用使用,這與NSURLConnection是相同的
"TLSMaximumSupportedProtocol" 和 "TLSMinimumSupportedProtocol" 確定是否支持SSLProtocol版本的會話
"Caching Policies"
URLCache 是會話使用的緩存。默認情況下,NSURLCache 的 + sharedURLCache 會被使用,這與NSURLConnection是相同的
requestCachePolicy 指定了一個請求的緩存響應應該在什么時候返回。這相當於NSURLRequest 的-cachePolicy方法
"Custom Protocols"
"HTTPMaximumConnectionsPerHost"是 Foundation 框架中URL加載系統的一個新的配置選項。它曾經被用於NSURLConnection管理私人連接池。現在有了NSURLSession,開發者可以在需要時限制連接到特定主機的數量
"HTTPShouldUsePipelining"也出現在NSMutableURLRequest,它可以被用於開啟HTTP管道,這可以顯着降低請求的加載時間,但是由於沒有被服務器廣泛支持,默認是禁用的
"sessionSendsLaunchEvents" 是另一個新的屬性,該屬性指定該會話是否應該從后台啟動
"connectionProxyDictionary"指定了會話連接中的代理服務器。同樣地,大多數面向消費者的應用程序都不需要代理,所以基本上不需要配置這個屬性
關於連接代理的更多信息可以在 CFProxySupport Reference 找到。
"Cookie Policies"
-"HTTPCookieStorage" 是被會話使用的cookie存儲。默認情況下,NSHTTPCookieShorage的 + sharedHTTPCookieStorage會被使用,這與NSURLConnection是相同的
-"HTTPCookieAcceptPolicy" 決定了該會話應該接受從服務器發出的cookie的條件
-"HTTPShouldSetCookies" 指定了請求是否應該使用會話HTTPCookieStorage的cookie
"Security Policies"
URLCredentialStorage 是會話使用的證書存儲。默認情況下,NSURLCredentialStorage 的+ sharedCredentialStorage 會被使用使用,這與NSURLConnection是相同的
"TLSMaximumSupportedProtocol" 和 "TLSMinimumSupportedProtocol" 確定是否支持SSLProtocol版本的會話
"Caching Policies"
URLCache 是會話使用的緩存。默認情況下,NSURLCache 的 + sharedURLCache 會被使用,這與NSURLConnection是相同的
requestCachePolicy 指定了一個請求的緩存響應應該在什么時候返回。這相當於NSURLRequest 的-cachePolicy方法
"Custom Protocols"
protocolClasses是注冊NSURLProtocol類的特定會話數組
統一配置NSURLSession
代碼示例:
-(NSURLSession *)session { if (_session == nil) { //創建NSURLSessionConfiguration
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; //設置請求超時為10秒鍾
config.timeoutIntervalForRequest = 10; //在蜂窩網絡情況下是否繼續請求(上傳或下載)
config.allowsCellularAccess = NO; _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]]; } return _session; }