← retour aux snippets

serveur http local rapide avec python

Démarrer un serveur HTTP local en toute sécurité pour tester des fichiers statiques.


objectif

Servir rapidement un dossier en HTTP pour tester des pages ou des assets, sans installer d’outil supplémentaire, et sans exposer la machine au réseau.

code minimal

# python 3: servir le répertoire courant sur 127.0.0.1:8000
python3 -m http.server 8000 --bind 127.0.0.1

utilisation

# servir un dossier spécifique (ex: ./public) et afficher l'URL
PORT=8080
DIR="./public"
echo "http://127.0.0.1:$PORT/"
python3 -m http.server "$PORT" --bind 127.0.0.1 --directory "$DIR"

# choisir IPv6 local uniquement
python3 -m http.server 8000 --bind ::1 --directory ./public

# ouvrir le navigateur automatiquement (macOS)
open "http://127.0.0.1:8000/" &
python3 -m http.server 8000 --bind 127.0.0.1

# ouvrir le navigateur automatiquement (Linux avec xdg-utils)
xdg-open "http://127.0.0.1:8000/" >/dev/null 2>&1 &
python3 -m http.server 8000 --bind 127.0.0.1

variante(s) utile(s)

# journaliser les requêtes dans un fichier
python3 -m http.server 8000 --bind 127.0.0.1 2>&1 | tee server.log

# servir un dossier temporaire pour un test rapide
tmpdir="$(mktemp -d)"; echo "hello" > "$tmpdir/index.html"
python3 -m http.server 8000 --bind 127.0.0.1 --directory "$tmpdir"

# vérifier que le port est libre avant de lancer
if lsof -tiTCP:8000 -sTCP:LISTEN >/dev/null; then
  echo "port 8000 occupé" >&2; exit 1
fi
python3 -m http.server 8000 --bind 127.0.0.1

notes

  • liez toujours sur 127.0.0.1 (ou ::1) pour éviter d’exposer le service sur le réseau.
  • l’option --directory nécessite Python 3.7 ou plus.
  • ce serveur est minimal: pas de TLS, pas d’authentification; ne l’utilisez pas en production.
  • les types MIME et le cache sont basiques; pour tester précisément, utilisez un serveur plus complet (nginx, caddy) ou un outil dédié.