Изменения в Qt Network
Qt 6 — результат целенаправленной работы по повышению эффективности и удобства использования фреймворка.
Мы стараемся поддерживать двоичную и исходную совместимость всех публичных API в каждом релизе. Но некоторые изменения были неизбежны для улучшения Qt.
В этом разделе мы обобщаем изменения в Qt Network и предоставляем рекомендации по их обработке.
Изменения в API
Перегрузки функций с неоднозначными именами
Было удалено несколько перегруженных функций с неоднозначными именами. Сигнал error() заменён на errorOccured() в QAbstractSocket и его наследниках (QTcpSocket, QUdpSocket, QLocalSocket и QSslSocket), а также в QNetworkReply. Код, например:
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();
Удалено управление носителем
Классы QNetworkConfiguration и QNetworkConfigurationManager удалены в Qt 6. Вследствие этого также удалены следующие методы QNetworkAccessManager:
void setConfiguration(const QNetworkConfiguration &config); QNetworkConfiguration configuration() const; QNetworkConfiguration activeConfiguration() const; void setNetworkAccessible(NetworkAccessibility accessible); NetworkAccessibility networkAccessible() const; void networkSessionConnected();
Примечание: Qt 6.0 не предоставляет замен для этих удалённых классов и функций.
Удаленные перечисления
В QtNetwork удалено несколько перечислений. Это включает константы для больше не поддерживаемых протоколов и функций:
- QSsl::SslV2;
- QSsl::SslV3;
- QSsl::TlsV1SslV3;
- QNetworkRequest::SpdyAllowedAttribute;
- QNetworkRequest::SpdyWasUsedAttribute;
- QNetworkAccessManager::UnknownAccessibility;
- 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 политика перенаправления по умолчанию изменилась с ручной на QNetworkRequest::NoLessSafeRedirectPolicy. Если ваше приложение использует ручную обработку перенаправления (оно подключает свой слот к сигналу QNetworkReply::redirected), вы должны явно установить эту политику при создании запроса:
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);
HTTP/2 включен по умолчанию
В Qt 6 QNetworkAccessManager включает протокол HTTP/2 по умолчанию. В зависимости от схемы ("https" или "http"), QNetworkAccessManager будет использовать расширение TLS для согласования протокола прикладного уровня или заголовок HTTP «protocol upgrade» для согласования HTTP/2. Если HTTP/2 не может быть согласован, менеджер доступа вернётся к использованию HTTP/1.1. Если ваше приложение может использовать только HTTP/1.1, вам необходимо вручную отключить HTTP/2 в новом запросе:
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/network-changes-qt6.html