Есть QNetworkAccessManager с установленным кешем QNetworkDiskCache, никакой магии...
C++ (Qt)
manager = new QNetworkAccessManager(this);
QNetworkDiskCache *cache = new QNetworkDiskCache(this);
// 100 Mb
cache->setMaximumCacheSize(100*1024*1024);
cache->setCacheDirectory("cacheDir");
manager->setCache(cache);
QNetworkRequest request(QUrl("http://yandex.ru"));
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork);
request.setAttribute(QNetworkRequest::CacheSaveControlAttribute, true);
manager->get(request);
Данные грузятся из сети, всё вроде бы нормально. Теперь отключаем сеть, устанавливает режим контроля кеша в QNetworkRequest::AlwaysCache вместо QNetworkRequest::PreferNetwork, компилируем, запускаем... Результат - QNetworkReply::error() возвращает ошибку 203 (QNetworkReply::ContentNotFoundError). А всё потому, что я грузил yandex.ru, и произошёл редирект на yandex.by (который я обработал самостоятельно), и в кеш попали данные из yandex.by. Сайты без редиректов в этой ситуации работают нормально - отображается закешированная страница. Вопрос - какие есть мысли что с этим делать? В сети ничего не нашёл по этому поводу.