本页内容

QAbstractHttpServer Class

用于实现 HTTP 服务器的子类 API。更多内容...

头文件: #include <QAbstractHttpServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)
qmake: QT += httpserver
自: Qt 6.4
继承自: QObject
被继承于:

QHttpServer

公共函数

QAbstractHttpServer(QObject *parent = nullptr)
virtual ~QAbstractHttpServer() override
(since 6.8) void addWebSocketUpgradeVerifier(const QObject *context, Handler &&func)
bool bind(QLocalServer *server)
bool bind(QTcpServer *server)
(since 6.9) QHttpServerConfiguration configuration() const
bool hasPendingWebSocketConnections() const
(since 6.8) QHttp2Configuration http2Configuration() const
QList<QLocalServer *> localServers() const
std::unique_ptr<QWebSocket> nextPendingWebSocketConnection()
QList<quint16> serverPorts() const
QList<QTcpServer *> servers() const
(since 6.9) void setConfiguration(const QHttpServerConfiguration &config)
(since 6.8) void setHttp2Configuration(const QHttp2Configuration &configuration)

信号

受保护函数

virtual bool handleRequest(const QHttpServerRequest &request, QHttpServerResponder &responder) = 0
virtual void missingHandler(const QHttpServerRequest &request, QHttpServerResponder &responder) = 0

详细说明

继承此类并重写handleRequest() 和missingHandler() 方法,以创建一个 HTTP 服务器。使用bind() 开始监听所有发往服务器的传入连接。

这是一个低级 API,有关实现 HTTP 服务器的更高层次 API,请参阅QHttpServer 。

成员函数文档

[explicit] QAbstractHttpServer::QAbstractHttpServer(QObject *parent = nullptr)

创建一个 QAbstractHttpServer 的实例,其父类为parent 。

[override virtual noexcept] QAbstractHttpServer::~QAbstractHttpServer()

销毁一个QAbstractHttpServer 实例。

[since 6.8] template <typename Handler> void QAbstractHttpServer::addWebSocketUpgradeVerifier(const QObject *context, Handler &&func)

添加一个回调函数func ,用于验证传入的WebSocket升级请求。该函数通过提供的context 对象被调用。如果至少有一个已注册的回调函数返回Accept ,且此前没有回调函数返回Deny ,则升级成功。如果未注册任何回调函数,或者所有回调函数均返回PassToNext ,则会调用missingHandler()函数。 回调函数按其注册顺序执行,且它们自身不能调用此函数。

注意: func 必须实现签名QHttpServerWebSocketUpgradeResponse (*)(const QHttpServerRequest &) 。

server.addWebSocketUpgradeVerifier(
        &server, [](const QHttpServerRequest &request) {
            if (request.url().path() == "/allowed"_L1)
                return QHttpServerWebSocketUpgradeResponse::accept();
            else
                return QHttpServerWebSocketUpgradeResponse::passToNext();
        });

该函数在 Qt 6.8 中引入。

另请参阅 QHttpServerRequest 、QHttpServerWebSocketUpgradeResponse 、hasPendingWebSocketConnections()、nextPendingWebSocketConnection()、newWebSocketConnection() 和missingHandler()。

bool QAbstractHttpServer::bind(QLocalServer *server)

将用于传输的指定QLocalServer server 绑定到HTTP服务器上。可以多次调用此函数,并传入不同的server 实例,以处理多个连接。

调用此函数后,所有新建立的连接都将由 HTTP 服务器处理并转发。

用户有责任在调用此函数之前,先对server 调用QLocalServer::listen()。如果server 未处于监听状态,则不会发生任何操作,并将返回false 。

如果server 为 nullptr,则返回 false。

如果成功,server 将成为此 HTTP 服务器的子节点,并返回true 。

另请参阅 QLocalServer 和QLocalServer::listen()。

bool QAbstractHttpServer::bind(QTcpServer *server)

将用于传输的给定 TCPserver 绑定到 HTTP 服务器。可以多次调用此函数,并传入不同的 TCPserver 实例,以处理多个连接和端口,例如同时处理 SSL 连接和未加密连接。

调用此函数后,所有新连接都将由 HTTP 服务器处理并转发。

用户有责任在调用此函数之前,先对server 调用QTcpServer::listen()。如果server 未处于监听状态,则不会发生任何操作,并将返回false 。

若调用成功,该server 将作为此HTTP服务器的子进程,并返回true 。

要启用 HTTP 2,请绑定到一个已通过QSslConfiguration::setAllowedNextProtocols() 调用并传入参数{ QSslConfiguration::ALPNProtocolHTTP2 } 的QSslServer 。

另请参阅 QTcpServer 、QTcpServer::listen() 和QSslConfiguration::setAllowedNextProtocols()。

[since 6.9] QHttpServerConfiguration QAbstractHttpServer::configuration() const

返回该服务器的通用配置参数。

该函数于 Qt 6.9 中引入。

另请参阅 setConfiguration()。

[pure virtual protected] bool QAbstractHttpServer::handleRequest(const QHttpServerRequest &request, QHttpServerResponder &responder)

重写此函数以处理每个传入的request ,方法是检查request 并将相应的响应发回responder 。如果request 处理成功,则返回true 。如果此方法返回false ,则随后将调用missingHandler()。

bool QAbstractHttpServer::hasPendingWebSocketConnections() const

如果服务器上有待处理的 WebSocket 连接,则返回true ;否则返回false 。

另请参阅 newWebSocketConnection()、nextPendingWebSocketConnection() 和addWebSocketUpgradeVerifier()。

[since 6.8] QHttp2Configuration QAbstractHttpServer::http2Configuration() const

返回服务器的 HTTP/2 配置参数。

该函数在 Qt 6.8 中引入。

另请参阅 setHttp2Configuration()。

QList<QLocalServer *> QAbstractHttpServer::localServers() const

返回该 HTTP 服务器的本地服务器。

另请参阅 serverPorts()。

[pure virtual protected] void QAbstractHttpServer::missingHandler(const QHttpServerRequest &request, QHttpServerResponder &responder)

重写此函数以处理所有未被handleRequest()处理的传入request 。每当handleRequest()返回false ,或者发生WebSocket升级尝试且newWebSocketConnection()未检测到任何连接,或者没有匹配的WebSocket验证器时,都会调用此函数。request 和responder 参数与调用handleRequest()时传入的参数相同。

另请参阅 handleRequest() 和addWebSocketUpgradeVerifier()。

[signal] void QAbstractHttpServer::newWebSocketConnection()

每当有新的 WebSocket 连接可用时,都会触发此信号。

另请参阅 hasPendingWebSocketConnections()、nextPendingWebSocketConnection() 和addWebSocketUpgradeVerifier()。

std::unique_ptr<QWebSocket> QAbstractHttpServer::nextPendingWebSocketConnection()

返回下一个待处理连接,将其作为已连接的QWebSocket 对象。如果调用此函数时没有待处理连接,则返回nullptr 。

注意: 返回的QWebSocket 对象不能在其他线程中使用。

另请参阅 newWebSocketConnection()、hasPendingWebSocketConnections() 和addWebSocketUpgradeVerifier()。

QList<quint16> QAbstractHttpServer::serverPorts() const

返回该QAbstractHttpServer 实例正在监听的端口列表。

该函数与 `QObject::children` 具有相同的保证,即最新添加的服务器是向量中的最后一个条目。

另请参阅 servers()。

QList<QTcpServer *> QAbstractHttpServer::servers() const

返回该 HTTP 服务器将处理其连接请求的 TCP 和 SSL 服务器。

另请参阅 serverPorts()。

[since 6.9] void QAbstractHttpServer::setConfiguration(const QHttpServerConfiguration &config)

将该服务器的通用配置参数设置为config 。

注意:新配置 将同时应用于已建立的连接和所有后续连接。

该函数在 Qt 6.9 中引入。

另请参阅 configuration()。

[since 6.8] void QAbstractHttpServer::setHttp2Configuration(const QHttp2Configuration &configuration)

设置服务器的 HTTP/2 配置参数。

下一次建立的 HTTP/2 连接将使用指定的configuration 。

该函数在 Qt 6.8 中引入。

另请参阅 http2Configuration()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.