// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
\ingroup qthttpserver-examples
\title Simple HTTP Server
\examplecategory {Web Technologies}
\brief Simple example of how to set up an HTTP server.
\image browserwindow.png

The Simple HTTP Server shows how to set up an HTTP server using the
QHttpServer class. It listens to two sockets: one TCP socket and one
SSL socket. Different callbacks are set up to demonstrate how to use
the \l{QHttpServer::}{route()} function.

A QHttpServer object is created, and a simple \l{QHttpServer::}{route()}
handles the path \c "/" by returning \c{Hello world}:
\snippet simple/main.cpp Setting up HTTP server

Then we register a callback that serves the server's assets to the client:
\snippet simple/main.cpp Returning assets

Here we use the QHttpServerRequest object to return the client's IP address:
\snippet simple/main.cpp Using QHttpServerRequest

For one of the paths, \c {"/auth"}, \l{RFC 7617}{Basic HTTP Authentication}
is used:
\snippet simple/main.cpp Using basic authentication

Then we use the \l{QHttpServer::}{addAfterRequestHandler()} function to
change the QHttpServerResponse object after it has been handled by the
callbacks registered by \l{QHttpServer::}{route()} by adding HTTP headers
to the response:
\snippet simple/main.cpp Using addAfterRequestHandler()

A QTcpServer listening to a port is bound to the HTTP server using the
\l{QAbstractHttpServer::}{bind()} function:
\snippet simple/main.cpp Binding the TCP server

And then \l QSslConfiguration is used to create an SSL configuration for a
QHttpServer to serve HTTPS traffic:
\snippet simple/main.cpp HTTPS Configuration example

After everything is set up, all that remains is to start handling incoming
requests:
\snippet simple/main.cpp Start handling requests

\example simple
*/
