我有一個簡單的方法,需要一個URL和負載從服務器:奇怪NSURLConnection的緩存行爲
- (void)loadURL:(NSString*)url
{
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
request.HTTPMethod = @"GET";
request.URL = [NSURL URLWithString:url];
NSHTTPURLResponse* response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
}
服務器返回與1天最大年齡的響應。
問題是,當我重複運行這些3條線,它們中的2隨機錯過緩存和重新加載響應:
[self loadURL:@"http://192.168.0.105:8080/users/51bdbc73808897302f000001/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww"];
[self loadURL:@"http://192.168.0.105:8080/users/51ee9d4e263d08fe04000003/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww"];
[self loadURL:@"http://192.168.0.105:8080/users/51d17b81de38c60b20000006/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww"];
如果我添加一些隨機唯一的數據(&的x,& Y,&ž )到每個請求的查詢字符串它解決了這個問題:
[self loadURL:@"http://192.168.0.105:8080/users/51bdbc73808897302f000001/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww&x"];
[self loadURL:@"http://192.168.0.105:8080/users/51ee9d4e263d08fe04000003/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww&y"];
[self loadURL:@"http://192.168.0.105:8080/users/51d17b81de38c60b20000006/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09RoyipmXgcENwfE6EV9yzvgp5VTSZww&z"];
另外,如果我減少查詢字符串的長度以80個字符它解決了這個問題,以及:
[self loadURL:@"http://192.168.0.105:8080/users/51bdbc73808897302f000001/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09Royipm"];
[self loadURL:@"http://192.168.0.105:8080/users/51ee9d4e263d08fe04000003/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09Royipm"];
[self loadURL:@"http://192.168.0.105:8080/users/51d17b81de38c60b20000006/avatar?size=200x200&access_token=abcdefghijklmnopqrstuvwxyzzp77eDLqub3EWfXGe4c09Royipm"];
這是怎麼回事? 這是iOS中的錯誤嗎?我該如何解決它?
P.S:我已經沒有多餘的東西都在iOS 5測試這在一個空的應用程序和6
怎樣檢驗網址加載系統無論從緩存中讀取或訪問遠程服務器?請求中設置了哪些緩存控制標頭?客戶端是否使用緩存?請注意,緩存可能會忽略服務器指定的到期時間。 – CouchDeveloper
@CouchDeveloper我運行'tail -f server.log | grep avatar'在進入時實時查看請求。服務器將Cache-Control標頭的值設置爲'max-age = 86400'。客戶端有NSURLCache集。 – soheilpro
您需要檢查請求中的緩存控制標頭。如前所述,客戶端可以忽略從服務器或代理設置的到期日期。緩存是相當複雜:[13緩存在HTTP](http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html) – CouchDeveloper