First things first, Happy new year dear Qt users!

I'm sorry, I'm really late :(

Some time ago we decided to avoid repeating the same tedious code to write our own "Simple" Http Servers. So we started writing a Qt HTTP server with several essential features. The word simple is quoted because something planned to be "simple" evolved into a piece of code hard to maintain.

To give few numbers during the last two years, I wrote three times the same code to parse request headers, write response headers, deal with connections, ... And I know, I'm not the only one who did the same (just check GitHub).

To take a look into the code, you can clone it with:

git clone --recursive https://codereview.qt-project.org/qt-labs/qthttpserver

You can manually build it using the last Qt release.

Before listing the features let's show the mandatory hello world example:

#include <QtCore> #include <QtHttpServer> int main(int argc, char **argv) { QCoreApplication app(argc, argv); QHttpServer httpServer; httpServer.route("/", []() { return "Hello world"; }); httpServer.listen(QHostAddress::Any); return app.exec(); }

At this moment it's a qt-labs project, and it's not officially part of the Qt distribution, but at some point, we'll add it.

Some features already implemented are:

HTTP 1.1

HTTPS but not yet merged

Customizable Routing

WebSockets integration

Error handling

I have planned some use-cases for this module:

Change the current embedded web server (and WebSockets) in the WebGL plugin to make it easy to create your own custom solutions based on the plugin.

Provide a way to serve an application built with WebAssamebly with live communication with the server via WebSockets and maybe using QtWebChannel.

Embed a web server into your application running on your desktop machine or embedded device.

Create a REST API

HTTP Server for QML

...

If you're interested in this project, don't forget to clone it and maybe if you're concerned you can consider contributing or provide some feedback in QTBUG-60105.

Next week Mikhail Svetkin will write more about the routing API. Stay tuned :D