处理重定向和其他请求改变(xcode文档翻译)

当服务器通过指示客户端向不同的URL发出新请求来响应请求时,会发生重定向。NSURLSession类在发生这种情况时会通知它的代理。要处理重定向,你的URL加载类代理必须实现URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:delegate方法。在这个方法中,代理可以检查引起重定向的新请求和响应,并可以通过NSURLSession的回调返回一个新的请求对象。
代理可以执行以下任何操作:

  • 允许通过简单地返回提供的请求进行重定向。
  • 创建一个新请求,指向一个不同的URL,并返回该请求。
  • 拒绝重定向并通过返回nil从连接中接收任何现有数据。

此外,代理可以取消重定向和连接。 使用NSURLSession,代理通过将取消消息(cancel message)发送到任务对象来执行此操作。如果处理请求的NSURLProtocol子类已更改了NSURLRequest,代理也会收到URLSession:task: willPerformHTTPRedirection: newRequest:completionHandler:消息,以便将其格式标准化,例如更改http://www.apple.com的请求到http://www.apple.com/.。这是因为请求的标准化或规范版本用于缓存管理。 在这种特殊情况下,传递给代表的响应为nil,代理应该只返回提供的请求
清单3-1中的示例实现允许规范更改并拒绝所有服务器重定向。

清单3-1 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);
}

如果代理不提供合适的重定实现去处理代理方法,则允许所有规范更改和服务器重定向。

提示:感觉本篇翻译的不是很好,请参考原文不当之处希望各位提出来,我会及时改正。

你可能感兴趣的:(处理重定向和其他请求改变(xcode文档翻译))