Servir des fichiers statiques via HTTP en Python

Servir des fichiers statiques via HTTP en Python

27 février 2020
C'est pour qui l'addition ?


Introduction

Pendant la phase de développement ou pour un test local rapide, il peut être utile de pouvoir servir des fichiers statiques (html, css, js, json, ...) simplement. Par la suite, il sera nécessaire de mettre en place un serveur web sérieux type apache ou nginx. Mais pour un test rapide, on peut utiliser Python pour servir le dossier courant. L'ensemble des fichiers seront accessibles en local via un navigateur web par exemple.

Servir un dossier statique via Python 3

Il suffit de se placer dans son dossier avec les fichiers statiques puis d'éxécuter la commande suivante :

python3 -m http.server

Vous pouvez à présent accèder aux fichiers de votre dossier depuis une requête HTTP. Par exemple, si on se rend à l'adresse localhost:8080 via un navigateur web, vous pourrez afficher le contenu de vos fichiers. S'il s'agit de fichier .html, ils seront rendus via le moteur de rendu HTML.

Par défaut, le serveur web sera sur le port 8000. Vous pouvez choisir un autre port (exemple : 9090) en l'ajoutant à la fin :

python3 -m http.server 9090

Coté sortie console on aura ce genre de log :

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [26/Feb/2020 15:39:47] "GET / HTTP/1.1" 200 -

La premiere ligne indique que le serveur web est lancé et attend une nouvelle connexion. La deuxième ligne indique la nature de la requête traitée par notre navigateur web :

  • GET : action HTTP (GET, POST, PUT, DELETE, ...)
  • / : ressource demandée (ici c'est la racine)
  • HTTP/1.1 : version du protocole HTTP utilisé
  • 200 : le code de status retourné au client (200: OK succès)

Servir un dossier statique via Python 2

Pour Python 2, la syntaxe est très similaire :

python -m SimpleHTTPServer

Il est également possible de choisir le port d'écoute (exemple: 9090) en l'ajoutant à la fin :

python -m SimpleHTTPServer 9090

Sources