2011-11-05 1 views
0

다운로드 파일을 캐시하기 위해 ASIDownloadCache를 사용하고 있습니다. 아래 코드는 요청과 다운로드 캐시를 설정하는 방법입니다. `요청 = [super initWithURL : url1]; [요청 setTimeOutSeconds : 50];ASIDownloadCache 캐싱 된 데이터가 항상 사용되는 이유는 무엇입니까?

ASIDownloadCache *cache = [[ASIDownloadCache alloc] init] ; 
[cache setStoragePath:[path stringByAppendingPathComponent:@"resource"]]; 
[cache setShouldRespectCacheControlHeaders:NO]; 

self.myCache = cache;  
[cache release]; 
[request setDownloadCache:self.myCache]; 
//[self setSecondsToCache:60*60*24*30]; 
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy]; 
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

` 내 문제는 URL의 헤더가 수정 된 경우에는 ASIDownloadCache 여전히 캐시 된 데이터를 사용하고 있다는 점이다. 왜? 누군가 대답을 알고 있니?

변경하기 전에 해당 URL의 헤더처럼 다음

HTTP/1.1 200 OK 서버 : 아파치/2.2 캐시 제어 : 공공 콘텐츠 형식 : text/html; 문자셋 = UTF-8 날짜 : 2011년 11월 7일 (월) 그리니치 표준시 08시 26분 15초을 만료 : 2011년 11월 7일 (월) 그리니치 표준시 08시 23분 35초 에서 Pragma : 공공 전송 - 인코딩 : 1320654215 연결 : Etag입니다 청크 : 연결 유지 마지막 수정 :

HTTP/1.1 200 OK 서버 : 아파치/2.2 캐시 - 2011년 11월 7일 (월) 그리니치 표준시 08시 23분 35초

헤더를 수정 한 후하면 다음과 같다 컨트롤 : 공개 콘텐츠 형식 : text/html; 문자셋 = UTF-8 날짜 : 2011년 11월 7일 (월) 그리니치 표준시 08시 28분 49초을 만료 : 2011년 11월 7일 (월) 그리니치 표준시 08시 28분 32초 에서 Pragma : 공공 전송 - 인코딩 : 1320654512 연결 : Etag입니다 청크 : Keep-Alive Last-Modified : 2011 년 11 월 7 일 08:28:32 GMT

Last-Modified 필드가 동일하지 않더라도 캐시 된 데이터를 계속 사용하고 있습니다.

+0

charlesproxy 또는 유사하게 ASIHTTPRequest가 보내는 요청 및 서버의 응답을 캡처하여 질문에 추가하십시오. – JosephH

+0

헤더가 나열됩니다. 헤더에 문제가 있습니까? – Terry

+0

그들은 괜찮아 보인다. 코드를 살펴보고 캐시 된 데이터를 사용하는 이유를 알아야합니다. readResponseHeaders 및 중단 점 내에서 canUseCachedDataForRequest – JosephH

답변

0

내가 좋아하는 것 같아. 머리글을 가져 오면 요청이 완료되지 않았습니다. 헤더가 다르더라도 요청이 완료되었는지 여부도 확인합니다. 그래서 나는 내 자신의 캐싱을 작성해야한다고 생각합니다.

0

응답은 질문에 :

[cache setShouldRespectCacheControlHeaders:NO]; 

당신은 헤더 정보를 존중 캐시를 들어

[cache setShouldRespectCacheControlHeaders:YES]; 

를 사용해야합니다.

도움이 될 것입니다.

관련 문제