Qt HTTP Server

Qt HTTP Server 支持在应用程序中构建 HTTP 服务器功能。常见的用例包括通过 REST API 公开应用程序的功能,或使可信环境中的设备也能通过 HTTP 进行配置。限制和安全性中描述了限制

概述

Qt HTTP Server 基于RFC 2616RFC 9113的轻量级 HTTP 服务器嵌入到应用程序中。发送和接收的信息以及 HTTP 服务器的各个部分都有相应的类。

QHttpServer 类有一个route() 函数,用于将可调用信息绑定到不同的传入 URL。这些可调用函数可以将从 URL 解析出的不同可复制类型的extensible 集合作为参数。支持的类型包括大多数数字类型、QStringQByteArrayQUrl 。可调用程序还可选择将QHttpServerRequestQHttpServerResponder 对象作为参数。QHttpServerRequest 类包含传入请求的所有信息,从 POST HTTP 请求中获取body() 时需要使用该类。可调用程序要么返回QHttpServerResponse 对象,要么使用QHttpServerResponder 参数进行响应。QHttpServerResponse 类包含一个完整的响应,并有许多不同类型的构造函数,而QHttpServerResponder 则有各种写回客户端的方法。

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

也可以通过子类化QAbstractHttpServer 类并覆盖handleRequest() 和missingHandler() 函数来创建 HTTP 服务器。

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

限制和安全性

Qt HTTP Server HTTP 服务器不具备通用 HTTP 服务器所具备的许多高级功能和优化功能。此外,它在网络上的各种攻击载体方面也没有受到同样的严格审查。因此, 只能用于本地连接或在受信任的网络中使用,不要将端口暴露在互联网上。Qt HTTP Server

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

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

使用模块

使用 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 版的保护。更多详情,请参阅Qt Licensing

参考资料

示例

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

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