首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使-[NSURLCache cachedResponseForRequest:]处理重定向请求?

如何使-[NSURLCache cachedResponseForRequest:]处理重定向请求?
EN

Stack Overflow用户
提问于 2013-07-30 03:05:19
回答 1查看 754关注 0票数 2

我使用NSURLCache来存储集合视图单元格中使用的图像。当单元格出现时,我希望能够获得特定单元格的缓存图像(该单元格具有与其关联的图像的URL )。我可以使用-[NSURLCache cachedResponseForRequest:]实现这一点,但问题是,如果服务器返回HTTP301Move永久响应,则该方法返回一个缓存响应,该响应描述重定向,而不是包含实际图像数据的第二个后续响应。有什么简单的方法可以从NSURLCache获取重定向HTTP请求的缓存数据

EN

回答 1

Stack Overflow用户

发布于 2013-07-30 03:05:19

我找不到解决这个问题的内置方法,所以我在NSURLCache上创建了一个类别,它递归地遵循HTTP重定向:

代码语言:javascript
运行
复制
- (NSCachedURLResponse *)nf_cachedResponseForRequestByFollowingRedirects:(NSURLRequest *)request
{
    NSCachedURLResponse *cachedResponse = [self cachedResponseForRequest:request];
    NSHTTPURLResponse *HTTPURLResponse = (NSHTTPURLResponse *)cachedResponse.response;

    if ([@[@301, @302, @303, @307, @308] containsObject:@(HTTPURLResponse.statusCode)])
    {
        NSString *redirectedURL = HTTPURLResponse.allHeaderFields[@"Location"];
        if (redirectedURL.length > 0)
        {
            NSMutableURLRequest *redirectedRequest = request.mutableCopy;
            redirectedRequest.URL = [NSURL URLWithString:redirectedURL];
            return [self nf_cachedResponseForRequestByFollowingRedirects:redirectedRequest];
        }
        else
        {
            NSLog(@"Warning: got a redirected URL response, but without a 'Location' field to redirect to. Headers: %@", HTTPURLResponse.allHeaderFields);
            return cachedResponse;
        }
    }
    return cachedResponse;
}

注意:在重定向循环情况下,此解决方案可能导致无限递归(和堆栈溢出)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17937632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档