首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传输编码响应头值分块时,NSURLCache不起作用

传输编码响应头值分块时,NSURLCache不起作用
EN

Stack Overflow用户
提问于 2015-03-18 09:52:45
回答 1查看 594关注 0票数 9

今天,当我检查Charles Proxy中的请求和响应头时,我发现(可能) NSURLCache有一个问题。这个问题有点令人困惑,但我能够始终如一地重现它:

简而言之,这个问题与使用iOS的本地NSURLCache和默认策略的NSURLRequest的缓存有关。事实证明,只要响应具有头transfer-encoding: chunked,请求就不会被缓存。但是,如果响应头是content-length: xxx,则缓存可以正常工作。具体地说,当响应被分块时,NSURLCache似乎没有保存eTag,也忽略了将if-none-match头部附加到对相同url的后续请求中,因此,缓存失败(正如它应该的那样),即返回200而不是304。

我正在iOS8.2模拟器上进行测试。即使你没有解决方案,我也很想知道你是否遇到过同样的问题。我至少找到了one similar report),这里有一个related thread posted by my back-end engineer

EN

回答 1

Stack Overflow用户

发布于 2015-07-06 18:25:12

如果您手动将响应数据添加到缓存中,它应该会起作用。我有一个图像加载类,我想确保所有内容都被缓存,所以我这样做:

代码语言:javascript
复制
- (void)getImageWithURL:(NSURL *)url onCompletion:(void (^)(UIImage *image, NSError *error))completion {
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    UIImage *cachedImage = [self cachedImageForURLRequest:request];
    if (cachedImage) {
        NSLog(@"Got image from cache.");
        completion(cachedImage, nil);
        return;
    }

    [[[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        // Manually cache the response.
        NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:data userInfo:nil storagePolicy:NSURLCacheStorageAllowed];
        [[NSURLCache sharedURLCache] storeCachedResponse:cachedResponse forRequest:request];
        NSLog(@"Got a fresh image.");
        completion([UIImage imageWithData:data], error);
    }] resume];
}

- (UIImage *)cachedImageForURLRequest:(NSURLRequest *)urlRequest {
    NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:urlRequest];
    return [UIImage imageWithData:cachedResponse.data];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29112872

复制
相关文章

相似问题

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