RedirectHandler
一个协议,提供重定向函数,入参为将要被重定向的URLRequest,用闭包的方式返回一个新的URLRequest。
Session 内部有此成员变量,初始化时候可以传入。
具体执行过程在SessionDelegate中,URLSession的系统回调方法
open func urlSession(_ session: URLSession,
task: URLSessionTask,
willPerformHTTPRedirection response: HTTPURLResponse,
newRequest request: URLRequest,
completionHandler: @escaping (URLRequest?) -> Void) {
eventMonitor?.urlSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request)
if let redirectHandler = stateProvider?.request(for: task)?.redirectHandler ?? stateProvider?.redirectHandler {
redirectHandler.task(task, willBeRedirectedTo: request, for: response, completion: completionHandler)
} else {
completionHandler(request)
}
}
Redirector
一个遵循RedirectHandler的结构体,为我们提供了面对重定向可以采取的三个策略,目的是为了方便使用。
follow表示同意,doNotFollow禁止,modify修改重定向。