이 페이지에서

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);

응답이 캐시에서 온 것인지 네트워크에서 온 것인지 확인하려면 다음 방법을 적용할 수 있습니다:

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

보안 고려 사항

QNetworkDiskCache는 HTTP 응답 본문과 응답 헤더를 포함한 메타데이터를 암호화하지 않은 상태로 디스크에 저장합니다. 텍스트 콘텐츠에 적용되는 압축은 저장 효율성을 위한 것일 뿐, 기밀성 보호 기능을 제공하지 않습니다.

어떤 응답이 캐시되는지는 주로 서버에서 전송하는 HTTP 캐시 제어 헤더에 의해 결정됩니다. 올바르게 구성된 서버는 일반적으로 인증된 세션에서 발생하는 민감한 데이터가 포함된 응답의 캐싱을 방지합니다. 그러나 애플리케이션은 모든 서버가 이를 올바르게 처리할 것이라고 전적으로 신뢰할 수 없으며, 서버가 비민감하다고 간주하는 내용이 애플리케이션 자체의 요구 사항과 일치하지 않을 수도 있습니다.

서버의 캐싱 정책만으로는 충분하지 않은 경우:

캐시 항목은 기본적인 구조적 유효성 검사를 거치지만, 디스크 손상, 비정상적인 애플리케이션 종료 또는 기타 원인으로 인해 유효성을 상실할 수 있습니다. 애플리케이션은 별도의 유효성 검사를 거치지 않고는 캐시된 데이터를 신뢰할 수 있는 데이터로 간주해서는 안 됩니다.

멤버 함수 문서

[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.