版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.03.11 |
前言
我們做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ū)別
5. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(五) —— 關(guān)于NSURL加載系統(tǒng)(一)
6. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(六) —— 使用NSURLSession(二)
7. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(七) —— URL數(shù)據(jù)的編碼和解碼(三)
回顧
上一篇主要講述了URL數(shù)據(jù)的編碼和解碼,這一篇主要講述處理重定向和其他請求更改。
處理重定向和其他請求更改
當服務(wù)器通過指示客戶端應(yīng)該向另一個URL發(fā)出新請求來響應(yīng)請求時,會發(fā)生重定向。發(fā)生這種情況時,NSURLSession類會通知它的代理。
要處理重定向,您的URL加載類代理必須實現(xiàn)URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:代理方法。
在這種方法中,委托可以檢查新請求和導致重定向的響應(yīng),并且可以通過NSURLSession的完成處理程序返回一個新的請求對象。
代理可以執(zhí)行以下任何操作:
- 通過簡單地返回提供的請求來允許重定向。
- 創(chuàng)建一個新的請求,指向一個不同的URL,并返回該請求。
- 通過返回nil拒絕重定向并接收來自連接的任何現(xiàn)有數(shù)據(jù)。
另外,代理可以取消重定向和連接。使用NSURLSession,代理通過將- cancel消息發(fā)送給任務(wù)對象來完成此操作。
如果處理請求的NSURLProtocol子類改變NSURLRequest以規(guī)范它的格式,例如,改變用于http://www.apple的請求為http://www.apple.com/。代理還接收URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:消息。發(fā)生這種情況是因為請求的標準版或規(guī)范版用于緩存管理。在這種特殊情況下,傳遞給代理的響應(yīng)為nil,代理應(yīng)該簡單地返回提供的請求。
Listing 3-1中的示例實現(xiàn)允許規(guī)范更改并拒絕所有服務(wù)器重定向。
// Listing 3-1 Example of an implementation of URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler
- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
willPerformHTTPRedirection:(NSHTTPURLResponse *)redirectResponse
newRequest:(NSURLRequest *)request
completionHandler:(void (^)(NSURLRequest *))completionHandler
{
NSURLRequest *newRequest = request;
if (redirectResponse) {
newRequest = nil;
}
completionHandler(newRequest);
}
如果代理沒有為合適的重定向處理代理方法提供實現(xiàn),則允許所有規(guī)范更改和服務(wù)器重定向。
后記
本篇主要介紹處理重定向和其他請求更改。
