問題

我在特定資料夾上設定NSURLCache(.././Application Support / Offline,所以不會被作業系統隨機刪除),然後我使用NSURLRequestRetrungCacheDataElseLoad策略傳送NSURLRequest.

如何判斷符合NSURLConnectionDelegate的類處理的響應來自快取或網路?

  最佳答案

這裡有關問題的好文章:

http://andrewmarinov.com/ioss-corenetwork-lying/

基本上,從NSHTTPURLResponse,狀態程式碼總是200

所以,如果真的需要知道,在您提出請求之前,您可以在快取中檢查專案

 NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response;
 

如果是這樣,則儲存修改後的“etag”或“modified-date”標題

 NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];
 

然後,在響應處理程式中檢查etag或modified-date是相同的.如果是這樣,響應來自快取!