변경 사항 Qt Network

Qt 6는 프레임워크를 보다 효율적이고 사용하기 쉽게 만들기 위한 의식적인 노력의 결과입니다.

각 릴리스에서 모든 공개 API에 대해 바이너리 및 소스 호환성을 유지하려고 노력합니다. 하지만 Qt를 더 나은 프레임워크로 만들기 위해 몇 가지 변경이 불가피했습니다.

이 주제에서는 이러한 변경 사항을 Qt Network 에 요약하고 이를 처리하기 위한 지침을 제공합니다.

API 변경 사항

모호한 이름 오버로드

몇 가지 모호한 오버로드 함수가 제거되었습니다. QAbstractSocket 와 그 상속자(QTcpSocket, QUdpSocket, QLocalSocket, QSslSocket), 그리고 QNetworkReply 에서 error() 신호가 errorOccurred() 로 대체됩니다. 와 같은 코드는

connect(socket, qOverload<QAbstractSocket::SocketError>(&QAbstractSocket::error),
        this, &SomeClass::errorSlot);

와 같은 코드는 다음과 같이 변경해야 합니다:

connect(socket, &QAbstractSocket::errorOccurred, this, &SomeClass::errorSlot);

QSslSocket 에서 TLS 핸드셰이크 중에 발생한 오류 목록을 반환하는 함수는 다음과 같이 변경되어야 합니다:

QList<QSslError> sslErrors() const;

의 이름이 sslHandshakeErrors()로 변경됩니다:

const auto tlsErrors = socket.sslHandshakeErrors();

베어러 관리가 제거되었습니다.

Qt 6에서는 QNetworkConfiguration 및 QNetworkConfigurationManager 클래스가 제거되었습니다. 따라서 QNetworkAccessManager 의 다음 멤버 함수도 제거됩니다:

void setConfiguration(const QNetworkConfiguration &config);
QNetworkConfiguration configuration() const;
QNetworkConfiguration activeConfiguration() const;
void setNetworkAccessible(NetworkAccessibility accessible);
NetworkAccessibility networkAccessible() const;
void networkSessionConnected();

QNetworkInformationQt 6.1에 처음 도입된 이 함수는 무기명 관리 API의 일부를 대체하는 것을 목표로 합니다. 이 함수는 운영 체제에서 알림을 받은 네트워크 변경 사항을 구독하는 통합 API를 제공하는 방식으로 작동합니다.

QNetworkInformation::reachability() Qt 6.1에 도입된 이 함수는 네트워크의 접근 가능성에 대한 보다 자세한 정보를 추가하면서 QNetworkAccessManager::networkAccessible() 함수를 대체합니다. 자세한 내용은 해당 문서를 참조하십시오.

Qt 6.2에서 QNetworkInformation 는 종속 포털을 감지하는 기능을 추가했습니다.

Qt 6.3에서는 QNetworkInformationQNetworkInformation::transportMedium() 및 QNetworkInformation::isMetered() 가 추가되었습니다.

삭제된 열거자

QtNetwork 에서 여러 열거자가 제거되었습니다. 여기에는 더 이상 지원되지 않는 프로토콜 및 기능에 대한 상수가 포함됩니다:

  • QSsl::SslV2;
  • QSsl::SslV3;
  • QSsl::TlsV1SslV3;
  • QNetworkRequest::SpdyAllowedAttribute;
  • QNetworkRequest::SpdyWasUsedAttribute;
  • QNetworkAccessManager::UnknownAccessibility;
  • QNetworkAccessManager::NotAccessible;
  • QNetworkAccessManager::접근 가능

및 이름이 적절한 명명 규칙을 따르지 않은 열거자:

QNetworkRequest::FollowRedirectsAttribute는 Qt 6에서 제거되었으며, 아래 리디렉션 처리 섹션을 참조하세요.

QSslSocket 구성

다음과 같은 더 이상 사용되지 않는 함수는 Qt 6에서 제거되었습니다:

QList<QSslCipher> ciphers() const;
void setCiphers(const QList<QSslCipher> &ciphers);
void setCiphers(const QString &ciphers);
static void setDefaultCiphers(const QList<QSslCipher> &ciphers);
static QList<QSslCipher> defaultCiphers();
static QList<QSslCipher> supportedCiphers();
QList<QSslCipher> ciphers() const;
void setCiphers(const QList<QSslCipher> &ciphers);
void setCiphers(const QString &ciphers);
static void setDefaultCiphers(const QList<QSslCipher> &ciphers);
static QList<QSslCipher> defaultCiphers();
static QList<QSslCipher> supportedCiphers();
bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
                       QRegExp::PatternSyntax syntax = QRegExp::FixedString);
void addCaCertificate(const QSslCertificate &certificate);
void addCaCertificates(const QList<QSslCertificate> &certificates);
void setCaCertificates(const QList<QSslCertificate> &certificates);
QList<QSslCertificate> caCertificates() const;
static bool addDefaultCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
                                     QRegExp::PatternSyntax syntax = QRegExp::FixedString);
static void addDefaultCaCertificate(const QSslCertificate &certificate);
static void addDefaultCaCertificates(const QList<QSslCertificate> &certificates);
static void setDefaultCaCertificates(const QList<QSslCertificate> &certificates);
static QList<QSslCertificate> defaultCaCertificates();
static QList<QSslCertificate> systemCaCertificates();

QSslConfiguration 및 그 멤버 함수를 사용하여 이러한 매개 변수를 설정하십시오:

auto sslConfiguration = QSslConfiguration::defaultConfiguration();
sslConfiguration.setCiphers("ECDHE-ECDSA-AES256-SHA384");
// Set other parameters here ...
socket.setSslConfiguration(sslConfiguration);

QNetworkAccessManager의 기본 동작 변경 사항

리디렉션 정책

Qt 6에서 기본 리디렉션 정책이 수동에서 QNetworkRequest::NoLessSafeRedirectPolicy 로 변경되었습니다. 애플리케이션이 수동 리디렉션 처리에 의존하는 경우(해당 슬롯을 QNetworkReply::redirected 신호에 연결), 요청을 생성할 때 이 정책을 명시적으로 설정해야 합니다:

request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);

HTTP/2는 기본적으로 활성화됩니다.

Qt 6에서 QNetworkAccessManager 은 기본적으로 HTTP/2 프로토콜을 활성화합니다. 스키마("https" 또는 "http")에 따라 QNetworkAccessManager 은 애플리케이션 계층 프로토콜 협상 TLS 확장 또는 "프로토콜 업그레이드" HTTP 헤더를 사용하여 HTTP/2를 협상합니다. HTTP/2를 협상할 수 없는 경우 액세스 관리자는 HTTP/1.1을 사용하게 됩니다. 애플리케이션이 HTTP/1.1만 사용할 수 있는 경우, 새 요청에서 수동으로 HTTP/2를 비활성화해야 합니다:

request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);

이제 아카이브 폭탄으로부터 보호하는 QNetworkAccessManager

Qt 6.2부터 QNetworkAccessManager 압축 해제 비율이 특정 임계값을 초과하면 응답을 오류로 처리하여 압축된 파일보다 훨씬 큰 파일로 압축 해제되는 것을 방지합니다. 이 검사는 특정 크기보다 큰 파일에만 적용되며, QNetworkRequest::setDecompressedSafetyCheckThreshold()를 호출하여 사용자 지정(또는 -1을 전달하여 비활성화)할 수 있습니다.

© 2025 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.