AFNetworking - 与ETag的请求

时间:2013-01-03 06:44:35

标签: objective-c ios afnetworking

我正在尝试在服务器上执行请求,该服务器响应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];

3 个答案:

答案 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: {}))

我希望它会帮助别人!