Kleiner HTTP-Server für Testzwecke

Mi, 20. Oktober 2021, Ralf Hersel

Ab und zu braucht man einen einfachen HTTP-Server, um lokale Webseiten zu testen oder um Dateien freizugeben. Wer keinen eigenen Webserver betreibt oder einen solchen bei einem Hoster laufen hat, kann sich mit einem Handgriff schnell einen solchen starten, ohne mit Apache- oder Nginx-Konfigurationen zu kämpfen.

Für diese Anforderung bietet die eierlegende Wollmilchsau Python eine Lösung in Form des Moduls 'http.server'. Mit einem Kommando lässt sich ein lokaler Webserver starten:

python3 -m http.server 9000

Python bietet die Möglichkeit ein Modul mit dem Parameter '-m' direkt aufzurufen, ohne dafür ein Skript zu schreiben. Optional kann ein Port (im Beispiel: 9000) angegeben werden; ansonsten lauscht der Server auf Port 8000. Das Python Modul 'http.server' verwendet das aktuelle Arbeitsverzeichnis als Web-Root. Daher empfiehlt es sich, den Befehl aus einem bestimmten Verzeichnis heraus zu starten. Hier ein Beispiel: in meinem Verzeichnis 'Dokumente' befinden sich allerlei Test-Dateien, sowie eine 'index.html'.

[ralf@ralf Dokumente]$ ls
acht.txt  apostrophe.md  demo.html  demo.md  eins.txt  index.html  sub  test.DAT  test.LCK  test.pdf
[ralf@ralf Dokumente]$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Ruft man nun im Webbrowser die angegebene Adresse auf, wird die Datei 'index.html' angezeigt:

Sollte die 'index.html' fehlen, erhält man ein Directory Listing:

Diese schnelle und einfache Lösung bietet sich nur für lokale und unkritische Tests an und sollte auf gar keinen Fall für produktive Systeme verwendet werden. Der kleine Webserver kann auch von ausserhalb des LANs erreicht werden, vorausgesetzt man öffnet im Router die IP und den Port. Davon rate ich aus Sicherheitsgründen dringend ab.