변경 사항 Qt Network
Qt 6의 변경 사항은 프레임워크를 더 효율적이고 사용하기 쉽게 만들기 위한 의도적인 노력의 결과입니다.
저희는 각 릴리스에서 모든 공개 API에 대해 바이너리 및 소스 호환성을 유지하기 위해 노력하고 있습니다. 하지만 Qt를 더 나은 프레임워크로 만들기 위한 노력의 일환으로 일부 변경 사항은 불가피했습니다.
이 주제에서는 Qt Network 의 변경 사항을 요약하고, 이를 처리하기 위한 지침을 제공합니다.
API 변경 사항
모호한 이름의 오버로드
모호한 오버로드 함수 몇 가지가 제거되었습니다. error() 시그널은 QAbstractSocket 및 그 파생 함수(QTcpSocket, QUdpSocket, QLocalSocket, QSslSocket)와 QNetworkReply 에서 errorOccurred()로 대체되었습니다. 다음과 같은 코드는:
connect(socket, qOverload<QAbstractSocket::SocketError>(&QAbstractSocket::error),
this, &SomeClass::errorSlot);따라서 다음과 같이 변경해야 합니다:
connect(socket, &QAbstractSocket::errorOccurred, this, &SomeClass::errorSlot);QSslSocket 에서, TLS 핸드셰이크 과정에서 발생한 오류 목록을 반환하는 함수:
는 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();QNetworkInformation, Qt 6.1에서 처음 도입된 이 기능은 베어러 관리 API의 일부 기능을 대체하기 위한 것입니다. 이 기능은 운영 체제에서 알리는 네트워크 변경 사항을 구독하는 통합 API를 제공하여 작동합니다.
QNetworkInformation::reachability(), Qt Network 6.1에서 도입된 이 함수는 QNetworkAccessManager::networkAccessible() 함수를 대체하는 동시에 네트워크 연결 가능성에 대한 보다 상세한 정보를 제공합니다. 자세한 내용은 해당 문서를 참조하십시오.
Qt 6.2에서 QNetworkInformation 는 캡티브 포털을 감지하는 기능을 추가했습니다.
Qt 6.3에서는 QNetworkInformation 에 QNetworkInformation::transportMedium() 및 QNetworkInformation::isMetered()가 추가되었습니다.
삭제된 열거형
QtNetwork 에서는 몇 가지 열거형이 제거되었습니다. 여기에는 더 이상 지원되지 않는 프로토콜 및 기능에 대한 상수가 포함됩니다:
- QSsl::SslV2;
- QSsl::SslV3;
- QSsl::TlsV1SslV3;
- QNetworkRequest::SpdyAllowedAttribute;
- QNetworkRequest::SpdyWasUsedAttribute;
- QNetworkAccessManager::알 수 없는 접근성;
- QNetworkAccessManager::NotAccessible;
- QNetworkAccessManager::Accessible
그리고 적절한 명명 규칙을 따르지 않은 열거자:
- QSsl::TlsV1 (QSsl::TlsV1_0 이 올바른 이름임);
- QNetworkRequest::HTTP2AllowedAttribute ( QNetworkRequest::Http2AllowedAttribute 를 사용하십시오);
- QNetworkRequest::HTTP2WasUsedAttribute ( QNetworkRequest::Http2WasUsedAttribute 를 사용하십시오);
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에서는 기본 리디렉션 정책이 'manual'에서 ' QNetworkRequest::NoLessSafeRedirectPolicy'로 변경되었습니다. 애플리케이션이 수동 리디렉션 처리에 의존하는 경우(즉, 슬롯을 QNetworkReply::redirected 신호에 연결한 경우), 요청을 생성할 때 이 정책을 명시적으로 설정해야 합니다:
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);HTTP/2는 기본적으로 활성화되어 있습니다
Qt 6에서 ` QNetworkAccessManager `는 기본적으로 HTTP/2 프로토콜을 활성화합니다. 스키마("https" 또는 "http")에 따라 ` QNetworkAccessManager `는 애플리케이션 계층 프로토콜 협상(Application Layer Protocol Negotiation) TLS 확장 또는 "프로토콜 업그레이드(protocol upgrade)" HTTP 헤더를 사용하여 HTTP/2를 협상합니다. HTTP/2 협상이 불가능한 경우, 액세스 관리자는 HTTP/1.1로 대체됩니다. 애플리케이션에서 HTTP/1.1만 사용할 수 있는 경우, 새 요청 시 HTTP/2를 수동으로 비활성화해야 합니다:
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);QNetworkAccessManager가 이제 아카이브 폭탄(archive bombs)을 방지합니다
Qt 6.2부터 QNetworkAccessManager 는 압축 해제 시 압축된 형태보다 훨씬 큰 파일이 생성되는 압축 파일을 방지하기 위해, 압축 해제 비율이 특정 임계값을 초과할 경우 응답에 오류를 발생시킵니다. 이 검사는 특정 크기보다 큰 파일에만 적용되며, QNetworkRequest::setDecompressedSafetyCheckThreshold()를 호출하여 해당 크기를 사용자 정의하거나(-1을 전달하여 비활성화) 할 수 있습니다.
© 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.