2010-10-31 55 views
1

我想檢查我的服務器上的文件(zip,jpg或其他)的日期,並且如果它們比我的iPhone上的副本更新,請下載它們。iphone代碼檢查服務器文件日期的問題

我寫了下面的方法,基於這裏大約一歲的帖子。它有兩個問題:

+ (NSString *) f_GetServerFileDate:(NSString *)MyURL { 
    NSURL *oURL = [NSURL URLWithString:MyURL]; 
    NSURLRequest *oRequest = [NSURLRequest requestWithURL:oURL]; 
    NSHTTPURLResponse *oResponse; 
    [NSURLConnection sendSynchronousRequest:oRequest returningResponse:&oResponse error:nil]; 
    if ([oResponse respondsToSelector:@selector(allHeaderFields)]) { 
     NSDictionary *metaData = [oResponse allHeaderFields]; 
     return [metaData objectForKey:@"Last-Modified"]; 
    } else { 
     return @"00000000"; 
    } 
} 

問題1:在給出「http://www.mysite.com/myzip.zip」作爲URL時返回「00000000」。 問題2:對於活動服務器頁面(只是一個測試;不是我真的會下載它),它會返回一個日期,該日期與上次上載或修改文件的日期沒有關係。

什麼是正確的方法?

回答

1

這可能不是您的iPhone代碼的問題,而是Web服務器的問題。 Web服務器不需要包含Last-Modified標頭屬性。對於動態頁面(例如ASP頁面),返回頁面動態生成的日期(即當前日期)而不是頁面開發或部署的日期是正確的。

我建議您使用瀏覽器擴展名,例如Live HTTP標頭,以便觀察Web服務器返回的HTTP標頭屬性。如果日期不存在,那麼您將不幸運(除非您有權訪問Web服務器並且可以在那裏修復它)。

此外,無論您的代碼上次修改時間,您的代碼都會始終下載圖像。如果您的請求中包含HTTP標頭If-Modified-Since,則可以防止此問題。這樣,如果圖像仍然是最新的,那麼網絡服務器會在圖像自指定日期後被修改的情況下發送圖像,或者只發送304(未修改)結果代碼。但是,如果支持該選項,則它取決於Web服務器,它只能用於靜態內容,除非Web應用程序的作者已專門實現它。