Я использую API 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. Когда я запрашиваю URL после изменения в JSON, он сначала возвращает старые данные, но если я обновляю страницу, он возвращает обновленные данные. Но в приложении ASIHTTPRequest всегда возвращает старые данные.
Я также пытаюсь отладить код ASIHTTPRequest, чтобы увидеть, используются ли какие-либо кэшированные данные. Но похоже, что он никогда не использует кеш загрузки, потому что он не был установлен. Он никогда не входит в метод [useDataFromCache].
В чем может быть проблема? Как я могу заставить ASIHTTPRequest проверить, есть ли обновленные данные на сервере, и заставить его получить действительно обновленный JSON?
EDIT
Я использовал заголовок Cache-Control, и теперь я получаю правильные обновленные данные JSON. Код выглядит следующим образом:
[request addRequestHeader:@"Cache-Control" value:@"no-cache"];
Тем не менее, я думаю, что теперь запрос всегда будет пытаться получить JSON, даже если он не был изменен, что снизит производительность.
Как я могу сделать так, чтобы сначала проверил сервер, изменены ли данные, и получить, если они были изменены? В настоящее время я получаю данные JSON в виде динамического ответа от URL-адреса php, поэтому нет файла, который я мог бы проверить на актуальность данных.
Какое может быть решение?
С уважением,