八年了Qt6终于来啦!Qt Network模块发生重大更改( 二 )

使用此功能 , 应用程序可以预连接到服务器 , 而无需发送任何请求 。 如果我们要在这样的连接上启用HTTP / 2 , 则该连接对于希望使用HTTP / 1.1并通过使用请求属性禁用HTTP / 2的应用程序将毫无用处 。 通过在“配置”参数中设置所需的协议列表 , 可以显式启用HTTP / 2 , 例如:
auto tlsConfig = QSslConfiguration::defaultConfiguration();tlsConfig.setAllowedNextProtocols({QSslConfiguration::ALPNProtocolHTTP2});manager.connectToHostEncrypted(host, port, tlsConfig);默认重定向策略已更改
另一个可能影响您的网络代码的更改是QNetworkAccessManager在Qt 6中使用的默认重定向策略 。 该策略API最初是在Qt 5中引入的 , 其思想是在Qt 6中切换为默认的自动重定向处理 。
QNetworkAccessManager支持几种重定向策略 , 由枚举QNetworkRequest :: RedirectPolicy描述 。 这些政策是:

  • ManualRedirectPolicy
  • NoLessSafeRedirectPolicy
  • SameOriginRedirectPolicy
  • UserVerifiedRedirectPolicy
从Qt 6开始 , QNetworkAccessManager发出请求时将使用的默认重定向策略是QNetworkRequest :: NoLessSafeRedirectPolicy(该策略禁止从“ https”重定向到“ http”) 。
如果您有一个应用程序 , 该应用程序依赖于连接到QNetworkReply :: redirected()的插槽来处理重定向 , 则必须使用Qt 6将策略设置为QNetworkRequest :: ManualRedirectPolicy:
req.setAttribute(RedirectPolicyAttribute, ManualRedirectPolicy);承载管理已删除
承载管理是对过去支持漫游和管理某些设备上的连接所需的机器的名称 。 它还可以选择连接到internet时使用的设备网络接口 。 今天 , 这种情况已不再 , 因为操作系统通常会自行处理漫游 , 并会自动选择最佳的网络接口来发送数据 , 通常不会为应用程序提供影响这些选择的方法(或不方便的方式) 。 尽管QNetworkManager提供了api来选择要使用的接口或配置正在使用的接口 , 但这一新的现实意味着当前没有支持的平台为Qt提供可靠的方式来完成请求 。 在随后的Wifi请求被触发后 , 可能会导致网络中的各种Qt请求保持高流量 , 从而导致网络在短时间内保持高流量 。 考虑到新的现实也使得承载管理在很大程度上是多余的 , 我们决定是时候让Qt网络的这一部分退役了 。 一个仍然有用的特性是能够检查连接并获得连接更改的通知 。 到目前为止 , 在qt6.0中还没有找到替代品 , 尽管我们已经收集了一些用例 , 并希望在接下来的小版本中有一个替代品来替代这个功能 。 如果您有特定的用例 , 您希望看到涵盖的内容 , 或者您想跟踪这个任务的进度 , 那么请转到QTBUG-86966 。
QSslSocket
在Qt 6中 , QSslSocket接收了一个附加的API , 提供有关作为TLS协议的一部分接收或发送的警报消息的信息 。 :以下面为例:
  • QSsl::AlertLevel describes how serious problem is
  • QSsl::AlertType indicates the type of problem
QSslSocket中有两个新信号:
  • QSslSocket :: alertSent()
  • QSslSocket :: alertReceived()
如果可能 , 这些信号还会报告问题的文本描述(如果由TLS库提供) 。
与TLS握手相关的另一项更改是能够在握手仍在进行时尽早报告握手期间遇到的错误的功能 。 这些错误直接从验证回调中报告 。 QSslConfiguration有一个新的getter和setter:
  • bool QSslConfiguration :: handshakeMustInterruptOnError()const;
  • void QSslConfiguration :: setHandshakeMustInterruptOnError()const;
QSslSocket有一个新信号:


推荐阅读