本页面

Qt HTTP Server

Qt HTTP Server 支持将 HTTP 服务器功能集成到应用程序中。主要用例是通过 REST API 公开应用程序的功能,或者使可信环境中的设备也能通过 HTTP 进行配置。所谓可信环境,也意味着Qt HTTP Server 不得直接暴露在互联网上,也不得用于为最终用户提供通用 Web 服务器的功能。 更多详细信息,请参阅“限制与安全性”。

概述

Qt HTTP Server 提供了将支持HTTP/2、HTTP/1.1 和HTTP/1.0 的轻量级HTTP服务器嵌入应用程序的构建模块。其中包含用于发送和接收消息的类,以及 HTTP 服务器各部分的类。

QHttpServer 类提供了一个route()函数,用于将可调用对象绑定到不同的传入URL。这些可调用对象可以接受一个extensible 集合作为参数,该集合包含从URL中解析出的各种可复制类型。支持的类型包括大多数数值类型、QString 、QByteArray 以及QUrl 。此外,可调用对象还可以可选地将QHttpServerRequest 和QHttpServerResponder 对象作为参数。QHttpServerRequest 类包含所有传入请求的信息,用于从POST HTTP请求中获取body()。这些可调用对象要么返回一个QHttpServerResponse 对象,要么使用QHttpServerResponder 参数进行响应。QHttpServerResponse 类包含完整的响应,并为不同类型提供了多种构造函数,而QHttpServerResponder 则提供了多种方法用于向客户端写回数据。

QHttpServer 类还提供了一个addAfterRequestHandler()函数,用于进一步处理QHttpServerResponse ;以及一个setMissingHandler()函数,用于覆盖当没有匹配到路由时返回404 Not Found 的默认行为。它从QAbstractHttpServer 类继承了bind()函数,用于绑定到正在监听的QTcpServer 、QSslServer 或QLocalServer 。

还可以通过继承QAbstractHttpServer 类并重写handleRequest() 和missingHandler() 函数来创建 HTTP 服务器。

运行时日志记录可按照此处所述进行配置。

限制与安全性

Qt HTTP Server 它不具备通用 HTTP 服务器所拥有的许多高级功能和优化。此外,它也没有经过针对网络中各种攻击向量的同样严格审查。因此,请仅将 `Qt HTTP Server` 用于本地连接或可信网络中,切勿将端口暴露到互联网上。

不过,您可以添加 HTTPS 支持作为一项基本的安全措施。如果 Qt 在编译时启用了对 TLS 的支持,您可以将 HTTP 服务器绑定到QSslServer 对象,从而提供传输层安全处理。

支持 HTTP/2 需要来自活动 TLS 后端的QSslSocket::SupportedFeature::ServerSideAlpn 功能。要检查后端是否支持此功能,请使用 `QSslSocket::isFeatureSupported`。

请参阅《Qt HTTP Server 安全注意事项》。

使用模块

使用 Qt 模块需要将其与模块库进行链接,既可以直接链接,也可以通过其他依赖项间接链接。包括 CMake 和 qmake 在内的多种构建工具都对此提供了专门支持。

使用 CMake 构建

使用find_package() 命令在 Qt6 软件包中定位所需的模块组件:

find_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)

另请参阅“使用 CMake 构建”概述。

使用 qmake 构建

要配置模块以便使用 qmake 进行构建,请在项目的 .pro 文件中将该模块作为 QT 变量的值添加:

QT += httpserver

许可

Qt HTTP Server 由The Qt Company 提供商业许可。此外,它还遵循GNU 通用公共许可证第 3 版(GNU General Public License, version 3)。更多详情请参阅Qt 许可。

参考

示例

该模块提供了以下示例,作为使用 API 的指南。

© 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.