Изменения в 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::RedirectPolicy, 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.0/network-changes-qt6.html