을 받고있다 : 데이터가 어쨌든 수정되지 않은 경우 장고에 기록 된 내 서버에상태 (304)는 아직도 내가 아래 블록을 사용하여 내 서버를 호출하고있어 데이터
void (^ successBlock)(AFHTTPRequestOperation *operation, id jsonDictionary) = ^(AFHTTPRequestOperation *operation, id jsonDictionary) {
NSLog(@"RESPONSE: %@", jsonDictionary);
};
void (^ failureBlock)(AFHTTPRequestOperation *operation, NSError *error) = ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failed: %@",[error localizedDescription]);
};
, 나는 HttpResponseNotModified
을 보낼 수 있습니다. 그러나이 응용 프로그램은 때때로 json 응답 (아마도 이전 요청에서)을 사용하여 successBlock
에서 실행하고 다른 경우에는 304 상태 코드를 사용하여 failureBlock
으로 이동합니다. 이것에 대한 이유가 있습니까? 디버그 포인트를 통해 서버 상태 코드를 보내면 서버가 304 상태 코드를 전송한다는 사실을 확인할 수 있습니다. AFNetworking이 때때로 캐시 된 객체를 가져 오는 이유는 무엇입니까? 그리고 그것을 어디에서 얻는가?
기본적으로 304 상태 오류가 전송 될 때 successBlock
이 실행됩니다 ... 상태 오류 코드가 있기 때문에 항상 failureBlock
을 누르십시오.
예상되는 동작처럼 보입니다. 'AFNetworking'은 응답을 캐싱하고 304를 반환하기 때문에 캐시 된 객체를 사용하고 있습니다. 사용 가능한 캐시가없는 경우 실패합니다. 서버가 304를 다시 리턴하지 않고 실제 자원을 리턴 할 수 있도록 다른 캐시 헤더를 지정하여 재 시도해야합니다. – Acey
강제로 응답을 캐시하지 않는 방법이 있습니까? – KVISH
저는이 분야의 전문가는 아니므로 더 자세한 정보를 제공해야합니다 (http://blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache/).)하지만 NSURLRequest의 cachePolicy를 NSURLRequestReloadIgnoringLocalCacheData로 설정하면 항상 원격 데이터를 가져와야합니다. – Acey