缓存控制:max-age不能使AFNetworking缓存响应。

4

在服务器端,我设置了Cache-Control: max-age=14400。

从我的iOS客户端,我按如下方式设置了一个AFHTTPSessionManager共享实例:

+ (TKClient *)sharedInstance {
static TKClient *instance = nil;
static dispatch_once_t token;

dispatch_once(&token, ^ {
    instance = [[TKClient alloc] initWithBaseURL:[NSURL URLWithString:kTKBaseUrl]];
    [instance setRequestSerializer:[AFJSONRequestSerializer serializer]];
});

return instance;

我可以这样调用我的API:

- (void)listingsWithParams:(NSDictionary *)params completion:(void (^)(NSMutableArray *listings, NSError *error))completion {
[self GET:@"api/listings" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
    // success here
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    // error here
}];

我已经确认这个列表调用的Cache-Control头部从服务器端返回正常。然而,每次调用都要向服务器发送请求,明显没有进行缓存。你有什么思路吗?

我是否需要在iOS端配置其他内容或以某种方式更改Cache-Control头部?谢谢!


还有一件事 - 如果我设置instance.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad; 那么所有东西都会被超级积极地缓存,即使我退出应用程序,但我想确保只缓存一段时间。 - Ken
1个回答

1
尝试添加这个:

尝试添加这个:

[connectionManager.requestSerializer setCachePolicy:NSURLRequestReturnCacheDataElseLoad];

编辑 再次检查 API 的标头,以确保您已经完成了所有步骤,没有遗漏任何内容! 也许您应该使用 "Cache-Control" = "public, max-age=14400";Cache-Control 标头中添加 public 关键字?

public 表示响应可以被任何缓存缓存,即使它通常是不可缓存的或仅在非共享缓存内缓存。


@Ken,我没有看到你上面的评论,对此感到抱歉,但我正在尝试帮助,我编辑了我的答案,希望它能帮到你! - M.Alatrash
非常抱歉我的假设是错误的,这个问题对我来说非常棘手。谢谢,我会尝试解决它! - Ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接