Sur cette page

QNetworkDiskCache Class

La classe `QNetworkDiskCache` fournit un cache sur disque très basique. En savoir plus...

En-tête : #include <QNetworkDiskCache>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Hérite de : QAbstractNetworkCache

Fonctions publiques

QNetworkDiskCache(QObject *parent = nullptr)
virtual ~QNetworkDiskCache()
QString cacheDirectory() const
QNetworkCacheMetaData fileMetaData(const QString &fileName) const
qint64 maximumCacheSize() const
void setCacheDirectory(const QString &cacheDir)
void setMaximumCacheSize(qint64 size)

Fonctions publiques réimplémentées

virtual qint64 cacheSize() const override
virtual QIODevice *data(const QUrl &url) override
virtual void insert(QIODevice *device) override
virtual QNetworkCacheMetaData metaData(const QUrl &url) override
virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) override
virtual bool remove(const QUrl &url) override
virtual void updateMetaData(const QNetworkCacheMetaData &metaData) override

Slots publics

virtual void clear() override

Fonctions protégées

virtual qint64 expire()

Description détaillée

QNetworkDiskCache stocke chaque URL dans son propre fichier au sein de l'cacheDirectory, à l'aide de QDataStream. Les fichiers de type MIME « texte » sont compressés à l'aide de qCompress. Les données ne sont écrites sur le disque que dans les méthodes insert() et updateMetaData().

Actuellement, il n'est pas possible de partager les mêmes fichiers de cache avec plusieurs caches sur disque.

Par défaut, QNetworkDiskCache limite à 50 Mo l'espace que le cache occupera sur le système.

Notez que vous devez définir le répertoire du cache pour que celui-ci fonctionne.

Pour activer le cache de disque réseau :

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
        + QLatin1StringView("/cacheDir/");
diskCache->setCacheDirectory(directory);
manager->setCache(diskCache);

Lors de l'envoi de requêtes, pour contrôler la priorité entre l'utilisation du cache et celle du réseau, tenez compte des éléments suivants :

using namespace Qt::StringLiterals;
// do a normal request (preferred from network, as this is the default)
QNetworkRequest request(QUrl(u"http://qt-project.org"_s));
manager->get(request);

// do a request preferred from cache
QNetworkRequest request2(QUrl(u"http://qt-project.org"_s));
request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
manager->get(request2);

Pour vérifier si la réponse provient du cache ou du réseau, vous pouvez appliquer la méthode suivante :

void replyFinished(QNetworkReply*reply) {
    QVariant fromCache = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
    qDebug() << "page from cache?" << fromCache.toBool();
}

Considérations relatives à la sécurité

QNetworkDiskCache stocke sur le disque les corps de réponse HTTP et les métadonnées, y compris les en-têtes de réponse, sans les chiffrer. La compression appliquée au contenu textuel vise uniquement à optimiser l'espace de stockage et n'assure aucune protection de la confidentialité.

Le choix des réponses mises en cache est principalement déterminé par les en-têtes HTTP « Cache-Control » envoyés par le serveur. Les serveurs correctement configurés empêchent généralement la mise en cache des réponses contenant des données sensibles issues de sessions authentifiées. Cependant, l’application ne peut pas compter sur le fait que tous les serveurs agissent correctement, et ce que le serveur considère comme non sensible peut ne pas correspondre aux exigences propres à l’application.

Dans les cas où la politique de mise en cache du serveur n’est pas suffisante :

  • Définissez QNetworkRequest::CacheSaveControlAttribute sur false pour les requêtes dont les réponses ne doivent pas être mises en cache.
  • Créez une sous-classe de ` QAbstractNetworkCache ` pour mettre en œuvre un filtrage spécifique à l'application permettant de déterminer quelles réponses sont mises en cache.

Les entrées de cache font l'objet d'une validation structurelle de base, mais peuvent devenir invalides en raison d'une corruption du disque, d'un arrêt incorrect de l'application ou d'autres causes. Les applications ne doivent pas considérer les données mises en cache comme fiables sans validation indépendante.

Documentation des fonctions membres

[explicit] QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)

Crée un nouveau cache sur disque. L'argument « parent » est transmis au constructeur de ` QAbstractNetworkCache`.

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

Supprime l'objet de cache. Cela n'efface pas le cache disque.

QString QNetworkDiskCache::cacheDirectory() const

Renvoie l'emplacement où seront stockés les fichiers mis en cache.

Voir aussi setCacheDirectory().

[override virtual] qint64 QNetworkDiskCache::cacheSize() const

Réimplémente : QAbstractNetworkCache::cacheSize() const.

[override virtual slot] void QNetworkDiskCache::clear()

Réimplémente : QAbstractNetworkCache::clear().

[override virtual] QIODevice *QNetworkDiskCache::data(const QUrl &url)

Réimplémente : QAbstractNetworkCache::data(const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

Nettoie le cache afin que sa taille soit inférieure à la taille maximale autorisée. Renvoie la taille actuelle du cache.

Lorsque la taille actuelle du cache est supérieure à la valeur renvoyée par ` maximumCacheSize()`, les fichiers de cache les plus anciens sont supprimés jusqu’à ce que la taille totale soit inférieure à 90 % de la valeur renvoyée par ` maximumCacheSize()`, en commençant par les plus anciens, en utilisant la date de création du fichier pour déterminer l’ancienneté d’un fichier de cache.

Les sous-classes peuvent réimplémenter cette fonction pour modifier l’ordre dans lequel les fichiers de cache sont supprimés, en tenant compte d’informations dont l’application dispose mais dont QNetworkDiskCache () ne dispose pas, par exemple le nombre d’accès à un cache.

Remarque : les appels à `cacheSize()` échouent si la taille actuelle du cache est inconnue.

Voir également ` maximumCacheSize()` et ` fileMetaData()`.

QNetworkCacheMetaData QNetworkDiskCache::fileMetaData(const QString &fileName) const

Renvoie l'QNetworkCacheMetaData du fichier de cache fileName.

Si fileName n'est pas un fichier de cache, QNetworkCacheMetaData sera invalide.

[override virtual] void QNetworkDiskCache::insert(QIODevice *device)

Réimplémente : QAbstractNetworkCache::insert(QIODevice *device).

qint64 QNetworkDiskCache::maximumCacheSize() const

Renvoie la taille maximale actuelle du cache disque.

Voir aussi ` setMaximumCacheSize()`.

[override virtual] QNetworkCacheMetaData QNetworkDiskCache::metaData(const QUrl &url)

Réimplémente : QAbstractNetworkCache::metaData(const QUrl &url).

[override virtual] QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)

Réimplémente : QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData).

[override virtual] bool QNetworkDiskCache::remove(const QUrl &url)

Réimplémente : QAbstractNetworkCache::remove(const QUrl &url).

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Définit le répertoire dans lequel les fichiers mis en cache seront stockés sur cacheDir

QNetworkDiskCache ce répertoire sera créé s'il n'existe pas.

Les éléments de cache préparés seront stockés dans le nouveau répertoire de cache lors de leur insertion.

Voir également cacheDirectory() et QStandardPaths::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Définit la taille maximale du cache disque sur size.

Si la nouvelle taille est inférieure à la taille actuelle du cache, le cache appellera la fonction ` expire()`.

Voir également maximumCacheSize().

[override virtual] void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)

Réimplémente : QAbstractNetworkCache::updateMetaData(const QNetworkCacheMetaData &metaData).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.