Bon nombre d'applications ont besoin d'un serveur HTTP léger, ne fût-ce que côté serveur pour répondre aux requêtes d'une API ReST ou pour afficher une interface déportée par WebGL. Il est assez rébarbatif d'implémenter, projet après projet, le même code pour lire des paquets HTTP, écrire les réponses, gérer les connexions et le routage entre une requête et le code correspondant. C'est pourquoi les développeurs de Qt se sont lancés dans le projet d'un nouveau module implémentant justement un serveur HTTP, le bien nommé Qt HTTP Server. Ce module se veut assez léger, plus qu'Apache ou nginx, probablement aussi que Cutelyst ou
QttpServer — tout du moins, pour le moment. Certains envisagent d'inclure un moteur comme
Jinja pour faciliter la création de pages HTML, voire un framework Web plus complet encore.
Le code est encore expérimental et est développé en parallèle des dernières versions de Qt. Pour le moment, un petit serveur HTTP pourrait être écrit comme ceci :
1 2 3 4 5 6 7 8 9 10 11 12
| #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();
} |
Pour le moment, Qt HTTP Server implémente déjà HTTP 1.0 et 1.1, HTTPS (en cours d'intégration), le routage (à l'aide de fonctions anonymes, apportées par C++11), les sockets Web (tout comme le module Qt Web Sockets) et la gestion des erreurs.
Voir aussi :
le dépôt Git du projet,
les discussions actuelles.