Qt HTTP Server

Qt HTTP Server supports building HTTP server functionality into an application. Common use cases are exposing the application's functionality through REST APIs, or making devices in a trusted environment configurable also via HTTP. The limitations are described in Limitations and Security.

Overview

Qt HTTP Server provides building blocks for embedding a lightweight HTTP server based on RFC 2616 and RFC 9113 in an application. There are classes for the messages sent and received, and for the various parts of an HTTP server.

The QHttpServer class has a route() function to bind callables to different incoming URLs. These callables can take as arguments an extensible collection of different copyable types that are parsed from the URL. Types supported are most numeric types, QString, QByteArray, and QUrl. Optionally the callables can also take QHttpServerRequest and QHttpServerResponder objects as arguments. The QHttpServerRequest class contains all the information of an incoming request, and is needed to get the body() from a POST HTTP request. The callables either return a QHttpServerResponse object or respond using the QHttpServerResponder argument. The QHttpServerResponse class contains a complete response and has numerous constructors for different types, while the QHttpServerResponder has various methods for writing back to the client.

The QHttpServer class also has an addAfterRequestHandler() function to process a QHttpServerResponse further, and a setMissingHandler() function to override the default behavior of returning 404 Not Found when no routes are matched. From the QAbstractHttpServer class it inherits a bind() function to bind to a listening QTcpServer, QSslServer, or QLocalServer.

An HTTP server can also be created by subclassing the QAbstractHttpServer class and overriding the handleRequest() and missingHandler() functions.

Runtime logging can be configured as described here.

Limitations and Security

Qt HTTP Server does not have many of the more advanced features and optimizations that general-purpose HTTP servers have. It also has not seen the same scrutiny regarding various attack vectors over the network. Use Qt HTTP Server, therefore, only for local connections or in a trusted network, and do not expose the ports to the internet.

You can add HTTPS support as a basic security measure, though. If Qt is compiled with support for TLS, you can bind the HTTP server to a QSslServer object, providing Transport Layer Security handling.

The QSslSocket::SupportedFeature::ServerSideAlpn feature from the active TLS backend is needed for HTTP/2 support. To check if a backend supports this, use QSslSocket::isFeatureSupported.

Using the Module

Using a Qt module requires linking against the module library, either directly or through other dependencies. Several build tools have dedicated support for this, including CMake and qmake.

Building with CMake

Use the find_package() command to locate the needed module components in the Qt6 package:

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

See also the Build with CMake overview.

Building with qmake

To configure the module for building with qmake, add the module as a value of the QT variable in the project's .pro file:

QT += httpserver

Licenses

Qt HTTP Server is available under commercial licenses from The Qt Company. In addition, it is available under the GNU General Public License, version 3. See Qt Licensing for further details.

Reference

Examples

The module provides the following Examples as a guide to using the 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.