Cette partie est basée sur [cet article](https://daanlenaerts.com/blog/2015/06/03/create-a-simple-http-server-with-python-3/), en anglais et qui donne peu de détails.

```python
from http.server import BaseHTTPRequestHandler, HTTPServer

# HTTPRequestHandler class
class MiniHTTPServerRequestHandler(BaseHTTPRequestHandler):

  # GET
  def do_GET(self):
        # Send response status code
        self.send_response(200)

        # Send headers
        self.send_header('Content-type','text/html')
        self.end_headers()

        # Send message back to client
        message = "Hello world!"
        # Write content as utf-8 data
        self.wfile.write(bytes(message, "utf8"))
        return

def run():
  print('starting server...')

  # Server settings
  # Choose port 8080, for port 80, which is normally used for a http server, you need root access
  server_address = ('127.0.0.1', 8081)
  httpd = HTTPServer(server_address, MiniHTTPServerRequestHandler)
  print('running server...')
  httpd.serve_forever()

run()
```

Python fournit un package `http` qui lui-même contient des sous-modules comme `server`. Ce dernier fournit une base, à partir de laquelle on peut écrire très rapidement un "mini-serveur" web.

Deux choses essentiellement à voir ici :

- La fonction `run()` qui est définie, et invoquée à la toute fin. C'est elle qui crée une "instance" du serveur (`HTTPServer`), associée à la machine locale (appelée par convention `localhost` et dont l'IP est *toujours* `127.0.0.1`).
- La classe `MiniHTTPServerRequestHandler` qui est, comme son nom l'indique, un *handler* ou gestionnaire (ça ne vous rappelle pas jQuery et ses handlers d'évènement ?). On passe la *classe elle-même* au constructeur de `HTTPServer`, qui instanciera elle-même le handler.

Petite subtilité : la classe `MiniHTTPServerRequestHandler` s'appelle handler, mais en fait ce sont réellement ses méthodes `do_GET()` et `do_POST()` (non utilisée ici) qui "gèreront" (handle) les requêtes HTTP, et renverront les réponses appropriées.

On le démarre comme pour les autres programmes : `python server.py` (Windows) ou `python3 server.py` (OS X / Linux).

Il écoute sur le port 8081. Ouvre donc ton navigateur à l'adresse [http://localhost:8081](http://localhost:8081) pour voir le résultat.