對于在網絡活動中的請求和響應,尤其是 HTTP 協議,Foundation 框架提供了相應的類來封裝這些信息。URL Loading System 的 API 會提供這些類的實例來傳遞相關信息。
Request
Foundation 框架中,通過 NSURLRequest 類封裝了對一個 URL 請求的信息。
通過所要請求資源的NSURL
實例來創建NSURLRequest
實例,除了使用默認的使用緩存策略和超時時間外,還可以在創建時通過傳入參數設置。
+ requestWithURL:
- initWithURL:
+ requestWithURL:cachePolicy:timeoutInterval:
- initWithURL:cachePolicy:timeoutInterval:
NSURLRequest
類內的部分屬性設置了請求時的行為,它們與在 configuration 中的設置是重合的。configuration 設置了 session 內所有請求 task 的行為,而NSURLRequest
則只影響所在 task。優先級是 request 覆蓋 configuration。
-
cachePolicy
,枚舉類型 NSURLRequestCachePolicy,指明了請求使用緩存響應的策略。
// 默認值,使用協議本身的緩存邏輯。
NSURLRequestUseProtocolCachePolicy
// 不使用現有緩存,數據需要從原始地址加載。
NSURLRequestReloadIgnoringLocalCacheData
// 無論緩存是否過期,先使用本地緩存數據。如果緩存中沒有請求所對應的數據,那么從原始地址加載數據。
NSURLRequestReturnCacheDataElseLoad
// 無論緩存是否過期,先使用本地緩存數據。如果緩存中沒有請求所對應的數據,那么放棄從原始地址加載數據,請求視為失敗。
NSURLRequestReturnCacheDataDontLoad
-
timeoutInterval
,請求的超時時間,默認值為60秒。 -
networkServiceType
,NSURLRequestNetworkServiceType類型,network service type 影響著操作系統對于網絡傳輸的優先級排列,進而影響系統電量、性能的消耗。默認值是NSURLNetworkServiceTypeDefault。 -
HTTPShouldUsePipelining
,布爾值,說明 session 內的 task 是否使用 HTTP pipelining。 -
allowsCellularAccess
,布爾值,指明在移動網絡下是否可發起請求。
當然NSURLRequest
類還包括一個指明請求資源 URL 的NSURL
類型屬性URL
,以及用于 cookie 保存策略
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain
的mainDocumentURL
屬性。
除了上述基本屬性外,NSURLRequest
類內還包括一些 HTTP 協議相關的屬性和方法:
HTTPBody
HTTPBodyStream
HTTPMethod
HTTPShouldHandleCookies
allHTTPHeaderFields
- valueForHTTPHeaderField
在NSURLRequest
類中,大部分屬性是只讀的,創建后無法修改,只能使用默認值。Foundation 框架還提供了一個NSURLRequest
的子類 NSMutableURLRequest,在該類的實例創建后,可以單獨的修改屬性的值,當然也提供了相應的修改的方法
- addValue:forHTTPHeaderField:
- setValue:forHTTPHeaderField:
Response
Foundation 框架提供 NSURLResponse 類封裝對 URL 請求的響應的元數據。可通過方法- initWithURL:MIMEType:expectedContentLength:textEncodingName:
創建。通過以下屬性保存了響應信息:
URL
MIMEType
expectedContentLength
textEncodingName
suggestedFilename
另外 Foundation 框架提供了NSURLResponse
的子類 NSHTTPURLResponse 類,來封裝 HTTP 協議相關的響應信息。通過方法
- initWithURL:statusCode:HTTPVersion:headerFields:
創建。額外提供的屬性有
statusCode
allHeaderFields
以及一個提供 HTTP 響應狀態碼的對應本地化字符串的方法
- localizedStringForStatusCode: