Spec-Zone.ru › Qt 6.0

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

Spec-Zone.ru

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