gpt4 book ai didi

iphone - AFNetworking : How to know if response is using cache or not ? 304 或 200

转载 作者:IT王子 更新时间:2023-10-29 08:08:50 24 4
gpt4 key购买 nike

我找不到我的问题的任何答案,可能是我遗漏了什么...

当我请求一个 url 时,我需要知道响应是来自缓存还是来自网络。

状态码是304还是200? (但是 AFNetworking 总是响应 200)

对于 ASIHTTPRequest,我曾经从 ASIHTTPRequest 检查“didUseCachedResponse”,这是完美的。

最佳答案

我想我找到了一个解决方案来确定是否使用 AFNetworking 2.0 从缓存返回响应。我发现每次从服务器返回新响应(状态 200,而不是 304)时,cacheResponseBlock 都会被调用,它是 AFHTTPRequestOperation 的一个属性。该 block 应该返回 NSCachedURLResponse 如果响应应该被缓存或者 nil 如果它不应该。这样您就可以过滤响应并仅缓存其中的一部分。在这种情况下,我正在缓存来自服务器的所有响应。诀窍是,当服务器发送 304 并从缓存中加载响应时,不会调用此 block 。所以,这是我正在使用的代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

BOOL __block responseFromCache = YES; // yes by default

void (^requestSuccessBlock)(AFHTTPRequestOperation *operation, id responseObject) = ^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseFromCache) {
// response was returned from cache
NSLog(@"RESPONSE FROM CACHE: %@", responseObject);
}
else {
// response was returned from the server, not from cache
NSLog(@"RESPONSE: %@", responseObject);
}
};

void (^requestFailureBlock)(AFHTTPRequestOperation *operation, NSError *error) = ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
};

AFHTTPRequestOperation *operation = [manager GET:@"http://example.com/"
parameters:nil
success:requestSuccessBlock
failure:requestFailureBlock];

[operation setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
// this will be called whenever server returns status code 200, not 304
responseFromCache = NO;
return cachedResponse;
}];

此解决方案适用于我,到目前为止我还没有发现任何问题。但是,如果您有更好的想法或对我的解决方案有一些异议,请随时发表评论!

关于iphone - AFNetworking : How to know if response is using cache or not ? 304 或 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12180727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com