2011-11-05 22 views
0

我正在使用ASIDownloadCache來緩存下載文件,下面的代碼是我如何設置請求和下載緩存。 `request = [super initWithURL:url1]; [request 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 服務器:Apache/2.2 緩存控制:公共 內容類型:文本/ HTML;字符集= UTF-8 日期:星期一,2011年11月7日8時26分15秒GMT 截止日期:星期一,2011年11月7日8時23分35秒GMT 附註:公共 傳輸編碼:分塊 的Etag:1320654215 連接:保持活動 的Last-Modified:星期一,2011年11月8點23分35秒07 GMT

的頭部修正後是這樣的:

HTTP/1.1 200 OK 服務器:Apache/2.2 的cache Control:public Content-Type:text/html;字符集= UTF-8 日期:星期一,2011年11月7日8時28分49秒GMT 截止日期:星期一,2011年11月7日8時28分32秒GMT 附註:公共 傳輸編碼:分塊 的Etag:1320654512 連接: Keep-Alive Last-Modified:Mon,07 Nov 2011 08:28:32 GMT

即使Last-Modified字段也不相同,它仍在使用緩存的數據。

+0

使用charlesproxy或類似方法來捕獲ASIHTTPRequest發送的請求以及來自服務器的響應,並將其添加到您的問題中。 – JosephH

+0

列出了標題,標題中是否有任何錯誤? – Terry

+0

他們看起來不錯;我認爲你需要瀏覽一下代碼,看看它爲什麼決定使用緩存數據。在readResponseHeaders中的斷點,並通過canUseCachedDataForRequest步驟 – JosephH

回答

0

我想我喜歡這個問題。當我得到標題時,請求尚未完成。即使標題不同,它也會檢查請求是否已完成。所以我認爲我應該寫我自己的緩存。

0

的反應是這樣的問題:

[cache setShouldRespectCacheControlHeaders:NO]; 

您應該使用

[cache setShouldRespectCacheControlHeaders:YES]; 

對於緩存尊重頭部的信息。

希望它會有所幫助。