Spec-Zone.ru › Qt 6.1

Изменения в 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

Spec-Zone.ru

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