5

我正在尝试在服务器上发出请求,该服务器使用 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];
4

3 回答 3

4

我遇到了同样的问题,我设法通过将请求更改为

  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]
                                                               cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                           timeoutInterval:60];
于 2013-08-07T08:23:54.783 回答
0

我已经尝试了您的代码,并且收到状态 200 - 好的,应该是这样。

代码 304 - 未修改,我无法获取。我已经尝试过几次快速和慢速运行命令,但我总是得到 200 作为响应。

当您获得 304 作为响应代码时,您是否有更多详细信息?

304 响应代码通常意味着内容没有被修改,您应该得到包含 200 作为响应的原始请求。

在这里您可以阅读更多关于 Etag 的信息:ETag vs Header Expires

于 2013-01-03T08:34:29.190 回答
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: {}))

我希望它会帮助别人!

于 2015-06-03T15:44:44.520 回答