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