Spec-Zone.ru › Qt

Изменения в Qt Network

Qt 6 — это результат целенаправленных усилий по повышению эффективности и удобства использования фреймворка.

Мы стараемся поддерживать бинарную и исходную совместимость всех публичных API в каждом релизе. Однако некоторые изменения были неизбежны, чтобы сделать Qt лучшим фреймворком.

В этой теме мы обобщаем эти изменения в Qt Network и предоставляем руководство по их обработке.

Изменения API

Перегрузки с неоднозначными именами

Удалены несколько перегруженных функций с неоднозначными именами. Сигнал error() заменен на errorOccurred() в 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.2/network-changes-qt6.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API