我正在尝试在服务器上执行请求,该服务器响应Etag以进行缓存。我已经为它编写了以下代码,但这些调用的响应在大多数情况下都是随机的,即有时响应状态代码为200,有时为304(预期)。我在代码中做错了什么,或者AFNetworking有什么特别的东西我应该记住。!
NSURL *url = [NSURL URLWithString:@"http://ia.media-imdb.com/images/M/MV5BNzI0NTY5NzQwMV5BMl5BanBnXkFtZTcwOTQyNTA5OA@@._V1._SY90_.jpg"];
NSMutableURLRequest *aRequest = [NSMutableURLRequest requestWithURL:url];
[aRequest setValue:@"\"61-smtLpBSL_SY90_#1\"" forHTTPHeaderField:@"If-None-Match"];
NSLog(@"headers: %@", aRequest.allHTTPHeaderFields);
AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:aRequest imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
NSLog(@"%@ %d", response.allHeaderFields, response.statusCode);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"Request failed with error: %@", error);
}];
[operation start];
答案 0 :(得分:4)
我遇到了同样的问题,我设法通过将我的请求更改为
来解决此问题 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:60];
答案 1 :(得分:0)
我已经尝试了你的代码,我收到状态200 - 好的,就像它应该的那样。
代码304 - 未修改,我无法得到。我已经尝试了几次快速和慢速运行命令,但我总是得到200作为响应。
如果您收到304作为响应代码,您是否有更多详细信息?
304响应代码通常意味着内容未被修改,您应该获得原始请求,其中包含200作为响应。
在这里,您可以阅读更多关于Etag的信息:ETag vs Header Expires
答案 2 :(得分:0)
我也遇到过Etag逻辑和AFNetworking的问题。我的问题只是cachePolicy
没有正确设置......
var manager = AFHTTPRequestOperationManager()
manager.requestSerializer = AFHTTPRequestSerializer()
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
manager.requestSerializer.setValue(etag, forHTTPHeaderField: "If-None-Match")
manager.GET(fullPath, parameters: parameters, success: {}, failure: {}))
我希望它会帮助别人!