我正在使用ASIHTTPRequest API從Web端獲取一些JSON數據。我正在使用異步請求而不更改默認緩存屬性。代碼如下:ASIHTTPRequest似乎總是緩存JSON數據
__unsafe_unretained ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
request.timeOutSeconds = 30;
[request setCompletionBlock:^(void)
{
NSString *str = [request responseString];
/*
*
*
*/
}];
[request setFailedBlock:^(void)
{
NSLog(@"status: %@",[request responseStatusMessage]);
NSLog(@"%@ : %@",[request url],[[request error] debugDescription]);
}];
[request startAsynchronous];
但是,雖然服務器中JSON數據的內容發生了變化,但獲得的JSON數據仍保留舊數據。
我使用網絡瀏覽器在筆記本電腦和iPhone safari上檢查了數據。當我在JSON更改後請求url時,它首先返回舊數據,但是如果我刷新頁面,它將返回更新的數據。但在應用程序中,ASIHTTPRequest始終返回舊數據。
我也嘗試調試ASIHTTPRequest代碼,以查看是否使用了任何緩存的數據。但它似乎從來沒有使用下載緩存,因爲它尚未設置。它永遠不會輸入[useDataFromCache]方法。
可能是什麼問題?我如何強制ASIHTTPRequest檢查服務器上是否有更新的數據,並使其獲得真正更新的JSON?
編輯
我用Cache-Control頭,現在我得到正確的更新JSON數據。代碼如下:
[request addRequestHeader:@"Cache-Control" value:@"no-cache"];
不過,我認爲從現在開始,請求將始終嘗試檢索JSON,即使它不被修改,這會降低性能。
我該如何讓它首先檢查服務器是否修改了數據,並檢索它是否被修改?目前我得到的JSON數據是一個來自php url的動態響應,所以沒有文件可以檢查數據的最新性。
什麼是解決方案?
問候,
嗯,我的網絡有一個代理服務器。 但據我記得,我也試圖在公共網絡中使用該應用程序,該應用程序又返回了舊數據。 但我仍然無法弄清楚如何在檢查數據最近的情況下執行緩存策略。如果我在服務器端的響應頭中提供Cache-Control頭,它也可以工作嗎?如果是,使用'(ASIAskServerIfModifiedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy)'數據緩存策略可能會工作? – manuyavuz 2012-02-12 21:44:00
感謝您的建議,我們意識到服務器端實際上是緩存響應,現在它的工作沒有問題。 – manuyavuz 2012-02-20 11:37:55