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 - OK を受け取りました。

コード 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 に答える