QNetworkDiskCache Class
QNetworkDiskCache クラスは、ごく基本的なディスクキャッシュ機能を提供します。詳細...
| ヘッダー: | #include <QNetworkDiskCache> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 継承元: | QAbstractNetworkCache |
パブリック関数
| 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) |
再実装されたパブリック関数
| 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 |
パブリックスロット
| virtual void | clear() override |
保護された関数
| virtual qint64 | expire() |
詳細な説明
QNetworkDiskCacheは、QDataStream を使用して、各URLをcacheDirectory 内の個別のファイルに保存します。テキストMIMEタイプを持つファイルは、qCompress を使用して圧縮されます。データは、insert()およびupdateMetaData()でのみディスクに書き込まれます。
現在、複数のディスクキャッシュ間で同じキャッシュファイルを共有することはできません。
QNetworkDiskCache は、デフォルトで、システム上でキャッシュが使用する容量を 50MB に制限しています。
なお、機能させるには、事前にキャッシュディレクトリを設定しておく必要があります。
ネットワークディスクキャッシュを有効にするには、次のようにします:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
+ QLatin1StringView("/cacheDir/");
diskCache->setCacheDirectory(directory);
manager->setCache(diskCache);リクエストを送信する際、キャッシュを使用するかネットワークを使用するかの優先順位を制御するには、以下の点を考慮してください:
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);レスポンスがキャッシュから返されたものか、ネットワークから返されたものかを確認するには、以下の方法があります:
voidreplyFinished(QNetworkReply*reply) {
QVariant fromCache= reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
qDebug() << "page from cache?" << fromCache.toBool();
}セキュリティに関する考慮事項
QNetworkDiskCacheは、HTTPレスポンスの本文およびレスポンスヘッダーを含むメタデータを、暗号化せずにディスクに保存します。テキストコンテンツに適用される圧縮は、保存効率を高めるためのものであり、機密性の保護を目的としたものではありません。
どのレスポンスがキャッシュされるかは、主にサーバーから送信される HTTP キャッシュコントロールヘッダーによって決定されます。適切に設定されたサーバーでは、通常、認証済みセッションからの機密データを含むレスポンスのキャッシュは防止されます。しかし、アプリケーションはすべてのサーバーがこれを正しく行うことを前提とすることはできず、また、サーバーが機密ではないとみなすものが、アプリケーション自身の要件と一致しない場合もあります。
サーバーのキャッシュポリシーが不十分な場合は、以下の対応が必要です:
- レスポンスを保存すべきでないリクエストについては、QNetworkRequest::CacheSaveControlAttribute を
falseに設定します。 - QAbstractNetworkCache をサブクラス化して、どのレスポンスをキャッシュするかをアプリケーション固有の条件でフィルタリングするように実装します。
キャッシュエントリには基本的な構造検証が行われていますが、ディスクの破損、アプリケーションの不適切な終了、その他の原因により無効になる可能性があります。アプリケーションは、独立した検証を行わずにキャッシュされたデータを信頼できるものとして扱ってはなりません。
メンバ関数のドキュメント
[explicit] QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)
新しいディスクキャッシュを作成します。parent 引数は、QAbstractNetworkCache のコンストラクタに渡されます。
[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()
キャッシュオブジェクトを破棄します。ただし、ディスクキャッシュはクリアされません。
QString QNetworkDiskCache::cacheDirectory() const
キャッシュされたファイルが保存される場所を返します。
setCacheDirectory()も参照してください 。
[override virtual] qint64 QNetworkDiskCache::cacheSize() const
QAbstractNetworkCache::cacheSize() const を再実装します。
[override virtual slot] void QNetworkDiskCache::clear()
QAbstractNetworkCache::clear() を再実装しています。
[override virtual] QIODevice *QNetworkDiskCache::data(const QUrl &url)
QAbstractNetworkCache::data(const QUrl &url) を再実装します。
[virtual protected] qint64 QNetworkDiskCache::expire()
キャッシュをクリーンアップし、そのサイズを最大キャッシュサイズ以下にします。キャッシュの現在のサイズを返します。
キャッシュの現在のサイズが `maximumCacheSize()` よりも大きい場合、合計サイズが `maximumCacheSize()` の 90% 未満になるまで、古いキャッシュファイルが削除されます。削除は、ファイルの作成日時を基準に、最も古いものから順に行われます。
サブクラスは、この関数を再実装して、QNetworkDiskCache が把握していないアプリケーション側の情報(例えば、キャッシュへのアクセス回数など)を考慮し、キャッシュファイルが削除される順序を変更することができます。
注: cacheSize() は、現在のキャッシュサイズが不明な場合、expire を呼び出します。
maximumCacheSize() およびfileMetaData()も参照してください 。
QNetworkCacheMetaData QNetworkDiskCache::fileMetaData(const QString &fileName) const
キャッシュファイル `fileName` に対応する `QNetworkCacheMetaData ` を返します。
fileName がキャッシュファイルでない場合、QNetworkCacheMetaData は無効になります。
[override virtual] void QNetworkDiskCache::insert(QIODevice *device)
QAbstractNetworkCache::insert(QIODevice *device) を再実装します。
qint64 QNetworkDiskCache::maximumCacheSize() const
ディスクキャッシュの現在の最大サイズを返します。
setMaximumCacheSize()も参照してください 。
[override virtual] QNetworkCacheMetaData QNetworkDiskCache::metaData(const QUrl &url)
QAbstractNetworkCache::metaData(const QUrl &url) を再実装しています。
[override virtual] QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)
QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData) を再実装します。
[override virtual] bool QNetworkDiskCache::remove(const QUrl &url)
QAbstractNetworkCache::remove (const QUrl &url)を再実装します。
void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)
キャッシュファイルが保存されるディレクトリをcacheDir
QNetworkDiskCache このディレクトリが存在しない場合は、作成されます。
準備されたキャッシュ項目は、挿入時に新しいキャッシュディレクトリに保存されます。
cacheDirectory() およびQStandardPaths::CacheLocationも参照してください 。
void QNetworkDiskCache::setMaximumCacheSize(qint64 size)
ディスクキャッシュの最大サイズを `size` に設定します。
新しいサイズが現在のキャッシュサイズよりも小さい場合、キャッシュは `expire()` を呼び出します。
maximumCacheSize()も参照してください 。
[override virtual] void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)
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.