http.server — HTTP-Server¶
Quellcode: Lib/http/server.py
Dieses Modul definiert Klassen zur Implementierung von HTTP-Servern.
Warnung
Die Verwendung von http.server wird für Produktionsumgebungen nicht empfohlen. Es implementiert nur grundlegende Sicherheitsüberprüfungen.
Verfügbarkeit: nicht WASI.
Dieses Modul funktioniert nicht oder ist nicht auf WebAssembly verfügbar. Weitere Informationen finden Sie unter WebAssembly-Plattformen.
Eine Klasse, HTTPServer, ist eine Unterklasse von socketserver.TCPServer. Sie erstellt und lauscht am HTTP-Socket und leitet die Anfragen an einen Handler weiter. Code zum Erstellen und Ausführen des Servers sieht wie folgt aus:
def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
httpd.serve_forever()
- class http.server.HTTPServer(server_address, RequestHandlerClass)¶
Diese Klasse baut auf der Klasse
TCPServerauf, indem sie die Serveradresse als Instanzvariablen namensserver_nameundserver_portspeichert. Der Server ist für den Handler zugänglich, typischerweise über die Instanzvariableserverdes Handlers.
- class http.server.ThreadingHTTPServer(server_address, RequestHandlerClass)¶
Diese Klasse ist identisch mit HTTPServer, verwendet aber Threads zur Bearbeitung von Anfragen durch die Verwendung von
ThreadingMixIn. Dies ist nützlich, um von Webbrowsern vorab geöffnete Sockets zu handhaben, auf denenHTTPServerunendlich lange warten würde.Hinzugefügt in Version 3.7.
- class http.server.HTTPSServer(server_address, RequestHandlerClass, bind_and_activate=True, *, certfile, keyfile=None, password=None, alpn_protocols=None)¶
Unterklasse von
HTTPServermit einem umhüllten Socket, der das Modulsslverwendet. Wenn das Modulsslnicht verfügbar ist, schlägt die Instanziierung einesHTTPSServer-Objekts mit einemRuntimeErrorfehl.Das Argument certfile ist der Pfad zur SSL-Zertifikatsketten-Datei, und keyfile ist der Pfad zur Datei, die den privaten Schlüssel enthält.
Ein password kann für mit PKCS#8 geschützte und umhüllte Dateien angegeben werden, aber seien Sie sich bewusst, dass dies möglicherweise hartkodierte Passwörter im Klartext preisgeben könnte.
Siehe auch
Siehe
ssl.SSLContext.load_cert_chain()für zusätzliche Informationen zu den akzeptierten Werten für certfile, keyfile und password.Wenn angegeben, muss das Argument alpn_protocols eine Sequenz von Strings sein, die die vom Server unterstützten „Application-Layer Protocol Negotiation“ (ALPN)-Protokolle angibt. ALPN ermöglicht es dem Server und dem Client, das Anwendungsprotokoll während des TLS-Handshakes auszuhandeln.
Standardmäßig ist es auf
["http/1.1"]gesetzt, was bedeutet, dass der Server HTTP/1.1 unterstützt.Hinzugefügt in Version 3.14.
- class http.server.ThreadingHTTPSServer(server_address, RequestHandlerClass, bind_and_activate=True, *, certfile, keyfile=None, password=None, alpn_protocols=None)¶
Diese Klasse ist identisch mit
HTTPSServer, verwendet aber Threads zur Bearbeitung von Anfragen durch Vererbung vonThreadingMixIn. Dies ist analog zuThreadingHTTPServer, das nurHTTPSSerververwendet.Hinzugefügt in Version 3.14.
HTTPServer, ThreadingHTTPServer, HTTPSServer und ThreadingHTTPSServer müssen bei der Instanziierung eine RequestHandlerClass erhalten, wovon dieses Modul drei verschiedene Varianten bereitstellt:
- class http.server.BaseHTTPRequestHandler(request, client_address, server)¶
Diese Klasse wird verwendet, um die beim Server eingehenden HTTP-Anfragen zu bearbeiten. An sich kann sie keine tatsächlichen HTTP-Anfragen beantworten; sie muss unterklassifiziert werden, um jede Anfrage-Methode (z. B. GET oder POST) zu behandeln.
BaseHTTPRequestHandlerstellt eine Reihe von Klassen- und Instanzvariablen sowie Methoden für die Verwendung durch Unterklassen bereit.Der Handler parst die Anfrage und die Header und ruft dann eine Methode auf, die spezifisch für den Anfragetyp ist. Der Methodenname wird aus der Anfrage konstruiert. Zum Beispiel wird für die Anfrage-Methode
SPAMdie Methodedo_SPAM()ohne Argumente aufgerufen. Alle relevanten Informationen werden in Instanzvariablen des Handlers gespeichert. Unterklassen müssen die Methode__init__()nicht überschreiben oder erweitern.BaseHTTPRequestHandlerhat die folgenden Instanzvariablen:- client_address¶
Enthält ein Tupel der Form
(host, port), das sich auf die Adresse des Clients bezieht.
- server¶
Enthält die Serverinstanz.
- close_connection¶
Boolean, der vor der Rückgabe von
handle_one_request()gesetzt werden sollte und angibt, ob eine weitere Anfrage erwartet werden kann oder ob die Verbindung geschlossen werden soll.
- requestline¶
Enthält die String-Darstellung der HTTP-Anfragezeile. Das abschließende CRLF wird entfernt. Dieses Attribut sollte von
handle_one_request()gesetzt werden. Wenn keine gültige Anfragezeile verarbeitet wurde, sollte es auf den leeren String gesetzt werden.
- command¶
Enthält den Befehl (Anfragetyp). Zum Beispiel
'GET'.
- path¶
Enthält den Anfragepfad. Wenn die Query-Komponente der URL vorhanden ist, dann enthält
pathdie Query. Gemäß der Terminologie von RFC 3986 enthältpathhier denhier-partund diequery.
- request_version¶
Enthält die Versionszeichenkette aus der Anfrage. Zum Beispiel
'HTTP/1.0'.
- headers¶
Enthält eine Instanz der durch die Klassenvariable
MessageClassspezifizierten Klasse. Diese Instanz parst und verwaltet die Header der HTTP-Anfrage. Die Funktionparse_headers()aushttp.clientwird zum Parsen der Header verwendet und erfordert, dass die HTTP-Anfrage einen gültigen Header im Stil von RFC 2822 bereitstellt.
- rfile¶
Ein Eingabestrom vom Typ
io.BufferedIOBase, der bereit ist, ab dem Anfang optionaler Eingabedaten zu lesen.
- wfile¶
Enthält den Ausgabestrom zum Zurückschreiben einer Antwort an den Client. Zur erfolgreichen Interaktion mit HTTP-Clients muss bei der Ausgabe in diesen Strom eine ordnungsgemäße Einhaltung des HTTP-Protokolls erfolgen.
Geändert in Version 3.6: Dies ist ein Stream vom Typ
io.BufferedIOBase.
BaseHTTPRequestHandlerhat die folgenden Attribute:- server_version¶
Gibt die Server-Software-Version an. Sie können dies überschreiben. Das Format sind mehrere durch Leerzeichen getrennte Zeichenketten, wobei jede Zeichenkette die Form name[/version] hat. Zum Beispiel
'BaseHTTP/0.2'.
- sys_version¶
Enthält die Python-Systemversion in einer Form, die von der Methode
version_stringund der Klassenvariableserver_versionverwendet werden kann. Zum Beispiel'Python/1.4'.
- error_message_format¶
Gibt eine Formatzeichenkette an, die von der Methode
send_error()zum Erstellen einer Fehlerantwort an den Client verwendet werden sollte. Die Zeichenkette wird standardmäßig mit Variablen ausresponsesbasierend auf dem ansend_error()übergebenen Statuscode gefüllt.
- error_content_type¶
Gibt den Content-Type-HTTP-Header von an den Client gesendeten Fehlerantworten an. Der Standardwert ist
'text/html'.
- protocol_version¶
Gibt die HTTP-Version an, der der Server entspricht. Sie wird in Antworten gesendet, um dem Client die Kommunikationsfähigkeiten des Servers für zukünftige Anfragen mitzuteilen. Wenn auf
'HTTP/1.1'gesetzt, erlaubt der Server persistente HTTP-Verbindungen; Ihr Server **muss** dann jedoch einen genauenContent-Length-Header (mitsend_header()) in allen seinen Antworten an Clients enthalten. Aus Kompatibilitätsgründen ist die Einstellung standardmäßig auf'HTTP/1.0'gesetzt.
- MessageClass¶
Gibt eine Klasse, die
email.message.Messageähnelt, zum Parsen von HTTP-Headern an. Normalerweise wird dies nicht überschrieben und ist standardmäßighttp.client.HTTPMessage.
- responses¶
Dieses Attribut enthält eine Zuordnung von Fehlercode-Integern zu zweielementigen Tupeln, die eine kurze und eine lange Nachricht enthalten. Zum Beispiel
{code: (shortmessage, longmessage)}. Die shortmessage wird normalerweise als message-Schlüssel in einer Fehlerantwort verwendet, und longmessage als explain-Schlüssel. Sie wird von den Methodensend_response_only()undsend_error()verwendet.
Eine Instanz von
BaseHTTPRequestHandlerhat die folgenden Methoden:- handle()¶
Ruft
handle_one_request()einmal (oder, wenn persistente Verbindungen aktiviert sind, mehrmals) auf, um eingehende HTTP-Anfragen zu bearbeiten. Sie müssen diese Methode nie überschreiben; implementieren Sie stattdessen geeignetedo_*()-Methoden.
- handle_one_request()¶
Diese Methode parst die Anfrage und leitet sie an die entsprechende
do_*()-Methode weiter. Sie müssen diese Methode nie überschreiben.
- handle_expect_100()¶
Wenn ein HTTP/1.1-konformer Server einen
Expect: 100-continue-Anfrage-Header erhält, antwortet er mit einem100 Continue, gefolgt von200 OK-Headern. Diese Methode kann überschrieben werden, um einen Fehler auszulösen, wenn der Server nicht möchte, dass der Client fortfährt. Zum Beispiel kann der Server wählen,417 Expectation Failedals Antwort-Header zu senden undreturn Falsezurückzugeben.Hinzugefügt in Version 3.2.
- send_error(code, message=None, explain=None)¶
Sendet und protokolliert eine vollständige Fehlerantwort an den Client. Der numerische code gibt den HTTP-Fehlercode an, wobei message eine optionale, kurze, menschenlesbare Beschreibung des Fehlers ist. Das Argument explain kann verwendet werden, um detailliertere Informationen über den Fehler bereitzustellen; es wird mit dem Attribut
error_message_formatformatiert und nach einem vollständigen Satz von Headern als Antwortkörper ausgegeben. Das Attributresponsesenthält die Standardwerte für message und explain, die verwendet werden, wenn kein Wert angegeben wird; für unbekannte Codes ist der Standardwert für beide der String???. Der Körper ist leer, wenn die Methode HEAD ist oder der Antwortcode einer der folgenden ist:1xx,204 No Content,205 Reset Content,304 Not Modified.Geändert in Version 3.4: Die Fehlerantwort enthält einen Content-Length-Header. Das Argument explain wurde hinzugefügt.
- send_response(code, message=None)¶
Fügt einen Antwort-Header zum Header-Puffer hinzu und protokolliert die akzeptierte Anfrage. Die HTTP-Antwortzeile wird in den internen Puffer geschrieben, gefolgt von den Headern Server und Date. Die Werte für diese beiden Header werden aus den Methoden
version_string()unddate_time_string()entnommen. Wenn der Server keine weiteren Header mit der Methodesend_header()senden möchte, sollte aufsend_response()ein Aufruf vonend_headers()folgen.Geändert in Version 3.3: Header werden in einem internen Puffer gespeichert und
end_headers()muss explizit aufgerufen werden.
- send_header(keyword, value)¶
Fügt den HTTP-Header einem internen Puffer hinzu, der in den Ausgabestrom geschrieben wird, wenn entweder
end_headers()oderflush_headers()aufgerufen wird. keyword sollte den Header-Schlüssel angeben, und value dessen Wert. Beachten Sie, dass nach Abschluss der send_header-Aufrufeend_headers()UNBEDINGT aufgerufen werden MUSS, um den Vorgang abzuschließen.Geändert in Version 3.2: Header werden in einem internen Puffer gespeichert.
- send_response_only(code, message=None)¶
Sendet nur den Antwort-Header, was für den Fall verwendet wird, dass der Server dem Client eine
100 Continue-Antwort sendet. Die Header werden nicht gepuffert und direkt an den Ausgabestrom gesendet. Wenn message nicht angegeben ist, wird die der Antwort code entsprechende HTTP-Nachricht gesendet.Hinzugefügt in Version 3.2.
- end_headers()¶
Fügt eine Leerzeile (die das Ende der HTTP-Header in der Antwort anzeigt) zum Header-Puffer hinzu und ruft
flush_headers()auf.Geändert in Version 3.2: Die gepufferten Header werden in den Ausgabestrom geschrieben.
- flush_headers()¶
Sendet die Header endgültig an den Ausgabestrom und leert den internen Header-Puffer.
Hinzugefügt in Version 3.3.
- log_request(code='-', size='-')¶
Protokolliert eine akzeptierte (erfolgreiche) Anfrage. code sollte den numerischen HTTP-Code angeben, der der Antwort zugeordnet ist. Wenn die Größe der Antwort verfügbar ist, sollte sie als Parameter size übergeben werden.
- log_error(...)¶
Protokolliert einen Fehler, wenn eine Anfrage nicht erfüllt werden kann. Standardmäßig wird die Nachricht an
log_message()weitergeleitet, daher nimmt sie dieselben Argumente (format und zusätzliche Werte) entgegen.
- log_message(format, ...)¶
Protokolliert eine beliebige Nachricht nach
sys.stderr. Dies wird typischerweise überschrieben, um benutzerdefinierte Protokollierungsmechanismen für Fehler zu erstellen. Das Argument format ist eine standardmäßige printf-ähnliche Formatzeichenkette, an die die zusätzlichen Argumente fürlog_message()zur Formatierung übergeben werden. Die IP-Adresse des Clients und das aktuelle Datum und die aktuelle Uhrzeit werden jeder protokollierten Nachricht vorangestellt.
- version_string()¶
Gibt die Versionszeichenkette der Serversoftware zurück. Dies ist eine Kombination der Attribute
server_versionundsys_version.
- date_time_string(timestamp=None)¶
Gibt das Datum und die Uhrzeit zurück, die von timestamp (das
Noneoder im Format vontime.time()sein muss) angegeben werden, formatiert für einen Nachrichten-Header. Wenn timestamp weggelassen wird, wird das aktuelle Datum und die aktuelle Uhrzeit verwendet.Das Ergebnis sieht wie folgt aus:
'Sun, 06 Nov 1994 08:49:37 GMT'.
- log_date_time_string()¶
Gibt das aktuelle Datum und die aktuelle Uhrzeit zurück, formatiert für die Protokollierung.
- address_string()¶
Gibt die Client-Adresse zurück.
Geändert in Version 3.3: Zuvor wurde eine Namensauflösung durchgeführt. Um Verzögerungen bei der Namensauflösung zu vermeiden, wird nun immer die IP-Adresse zurückgegeben.
- class http.server.SimpleHTTPRequestHandler(request, client_address, server, directory=None)¶
Diese Klasse bedient Dateien aus dem Verzeichnis directory und darunter, oder dem aktuellen Verzeichnis, wenn directory nicht angegeben ist, und bildet die Verzeichnisstruktur direkt auf HTTP-Anfragen ab.
Geändert in Version 3.7: Der Parameter directory wurde hinzugefügt.
Geändert in Version 3.9: Der Parameter directory akzeptiert ein pfadähnliches Objekt.
Ein Großteil der Arbeit, wie z.B. das Parsen der Anfrage, wird von der Basisklasse
BaseHTTPRequestHandlerübernommen. Diese Klasse implementiert die Funktionendo_GET()unddo_HEAD().Die folgenden Attribute werden als Klassenattribute von
SimpleHTTPRequestHandlerdefiniert- server_version¶
Dies ist
"SimpleHTTP/" + __version__, wobei__version__auf Modulebene definiert ist.
- extensions_map¶
Ein Dictionary, das Suffixe MIME-Typen zuordnet. Es enthält benutzerdefinierte Überschreibungen für die standardmäßigen Systemzuordnungen. Die Zuordnung wird case-insensitiv verwendet und sollte daher nur kleingeschriebene Schlüssel enthalten.
Geändert in Version 3.9: Dieses Dictionary wird nicht mehr mit den standardmäßigen Systemzuordnungen gefüllt, sondern enthält nur noch Überschreibungen.
Die Klasse
SimpleHTTPRequestHandlerdefiniert die folgenden Methoden- do_HEAD()¶
Diese Methode bedient den Anfragetyp
'HEAD': sie sendet die Header, die sie für eine entsprechendeGET-Anfrage senden würde. Sehen Sie sich die Methodedo_GET()für eine vollständigere Erklärung der möglichen Header an.
- do_GET()¶
Die Anfrage wird einer lokalen Datei zugeordnet, indem die Anfrage als Pfad relativ zum aktuellen Arbeitsverzeichnis interpretiert wird.
Wenn die Anfrage einer Datei zugeordnet wurde, wird das Verzeichnis auf eine Datei namens
index.htmloderindex.htm(in dieser Reihenfolge) überprüft. Wenn sie gefunden wird, werden die Inhalte der Datei zurückgegeben; andernfalls wird eine Verzeichnisliste generiert, indem die Methodelist_directory()aufgerufen wird. Diese Methode verwendetos.listdir(), um das Verzeichnis zu scannen, und gibt eine Fehlermeldung 404 zurück, wennlistdir()fehlschlägt.Wenn die Anfrage einer Datei zugeordnet wurde, wird diese geöffnet. Jede
OSError-Ausnahme beim Öffnen der angeforderten Datei wird einer Fehlermeldung 404,'File not found'zugeordnet. Wenn in der Anfrage ein Header'If-Modified-Since'vorhanden war und die Datei seitdem nicht geändert wurde, wird eine Antwort 304,'Not Modified'gesendet. Andernfalls wird der Inhaltstyp durch Aufruf der Methodeguess_type()erraten, die wiederum die Variable extensions_map verwendet, und der Inhalt der Datei wird zurückgegeben.Es wird ein Header
'Content-type:'mit dem erratenen Inhaltstyp ausgegeben, gefolgt von einem Header'Content-Length:'mit der Dateigröße und einem Header'Last-Modified:'mit der Änderungszeit der Datei.Anschließend folgt eine Leerzeile, die das Ende der Header anzeigt, und dann wird der Inhalt der Datei ausgegeben.
Als Beispiel für die Verwendung siehe die Implementierung der Funktion
testin Lib/http/server.py.Geändert in Version 3.7: Unterstützung des Headers
'If-Modified-Since'.
Die Klasse SimpleHTTPRequestHandler kann auf folgende Weise verwendet werden, um einen sehr einfachen Webserver zu erstellen, der Dateien relativ zum aktuellen Verzeichnis bereitstellt
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
SimpleHTTPRequestHandler kann auch unterklassifiziert werden, um das Verhalten zu verbessern, z. B. durch die Verwendung anderer Index-Dateinamen durch Überschreiben des Klassenattributs index_pages.
- class http.server.CGIHTTPRequestHandler(request, client_address, server)¶
Diese Klasse wird verwendet, um entweder Dateien oder die Ausgabe von CGI-Skripten aus dem aktuellen Verzeichnis und darunter bereitzustellen. Beachten Sie, dass die Abbildung der hierarchischen HTTP-Struktur auf die lokale Verzeichnisstruktur genau wie in
SimpleHTTPRequestHandlererfolgt.Hinweis
CGI-Skripte, die von der Klasse
CGIHTTPRequestHandlerausgeführt werden, können keine Redirects (HTTP-Code 302) ausführen, da der Code 200 (Skriptausgabe folgt) vor der Ausführung des CGI-Skripts gesendet wird. Dies unterbricht den Statuscode.Die Klasse führt jedoch das CGI-Skript aus, anstatt es als Datei bereitzustellen, wenn sie es als CGI-Skript errät. Es werden nur verzeichnisbasierte CGIs verwendet – die andere übliche Serverkonfiguration ist die Behandlung spezieller Erweiterungen als CGI-Skripte.
Die Funktionen
do_GET()unddo_HEAD()wurden modifiziert, um CGI-Skripte auszuführen und die Ausgabe bereitzustellen, anstatt Dateien bereitzustellen, wenn die Anfrage irgendwo unterhalb des Pfadescgi_directoriesliegt.Die Klasse
CGIHTTPRequestHandlerdefiniert den folgenden Datenmember- cgi_directories¶
Dies ist standardmäßig
['/cgi-bin', '/htbin']und beschreibt Verzeichnisse, die als Verzeichnisse mit CGI-Skripten behandelt werden sollen.
Die Klasse
CGIHTTPRequestHandlerdefiniert die folgende Methode- do_POST()¶
Diese Methode bedient den Anfragetyp
'POST', der nur für CGI-Skripte zulässig ist. Der Fehler 501, "Can only POST to CGI scripts", wird ausgegeben, wenn versucht wird, eine POST-Anfrage an eine Nicht-CGI-URL zu senden.
Beachten Sie, dass CGI-Skripte aus Sicherheitsgründen mit der UID des Benutzers nobody ausgeführt werden. Probleme mit dem CGI-Skript werden zu einem Fehler 403.
Veraltet seit Version 3.13, wird in Version 3.15 entfernt:
CGIHTTPRequestHandlerwird in 3.15 entfernt. CGI gilt seit über einem Jahrzehnt nicht mehr als gute Vorgehensweise. Dieser Code wird schon seit einiger Zeit nicht mehr gepflegt und findet kaum noch praktische Anwendung. Seine Beibehaltung könnte zu weiteren Sicherheitsüberlegungen führen.
Kommandozeilenschnittstelle¶
http.server kann auch direkt über den -m Schalter des Interpreters aufgerufen werden. Das folgende Beispiel zeigt, wie Dateien relativ zum aktuellen Verzeichnis bereitgestellt werden
python -m http.server [OPTIONS] [port]
Die folgenden Optionen werden akzeptiert:
- port¶
Der Server hört standardmäßig auf Port 8000. Der Standardwert kann durch Angabe der gewünschten Portnummer als Argument überschrieben werden
python -m http.server 9000
- -b, --bind <address>¶
Gibt eine bestimmte Adresse an, an die gebunden werden soll. Sowohl IPv4- als auch IPv6-Adressen werden unterstützt. Standardmäßig bindet sich der Server an alle Schnittstellen. Der folgende Befehl bewirkt beispielsweise, dass der Server nur an localhost gebunden wird
python -m http.server --bind 127.0.0.1
Hinzugefügt in Version 3.4.
Geändert in Version 3.8: IPv6-Unterstützung in der Option
--bind.
- -d, --directory <dir>¶
Gibt ein Verzeichnis an, aus dem die Dateien bereitgestellt werden sollen. Standardmäßig verwendet der Server das aktuelle Verzeichnis. Der folgende Befehl verwendet beispielsweise ein bestimmtes Verzeichnis
python -m http.server --directory /tmp/
Hinzugefügt in Version 3.7.
- -p, --protocol <version>¶
Gibt die HTTP-Version an, der der Server entspricht. Standardmäßig entspricht der Server HTTP/1.0. Der folgende Befehl führt beispielsweise einen HTTP/1.1-konformen Server aus
python -m http.server --protocol HTTP/1.1
Hinzugefügt in Version 3.11.
- --cgi¶
CGIHTTPRequestHandlerkann über die Kommandozeile aktiviert werden, indem die Option--cgiübergeben wirdpython -m http.server --cgi
Veraltet seit Version 3.13, wird in Version 3.15 entfernt: Die Kommandozeilenunterstützung
--cgifürhttp.serverwird entfernt, daCGIHTTPRequestHandlerentfernt wird.
Warnung
CGIHTTPRequestHandler und die Kommandozeilenoption --cgi sind nicht für die Verwendung durch nicht vertrauenswürdige Clients bestimmt und können anfällig für Ausnutzung sein. Immer in einer sicheren Umgebung verwenden.
- --tls-cert¶
Gibt eine TLS-Zertifikatskette für HTTPS-Verbindungen an
python -m http.server --tls-cert fullchain.pem
Hinzugefügt in Version 3.14.
- --tls-key¶
Gibt eine private Schlüsseldatei für HTTPS-Verbindungen an.
Diese Option erfordert, dass
--tls-certangegeben wird.Hinzugefügt in Version 3.14.
- --tls-password-file¶
Gibt die Passwortdatei für passwortgeschützte private Schlüssel an
python -m http.server \ --tls-cert cert.pem \ --tls-key key.pem \ --tls-password-file password.txt
Diese Option erfordert die Angabe von –tls-cert`.
Hinzugefügt in Version 3.14.
Sicherheitsüberlegungen¶
SimpleHTTPRequestHandler folgt symbolischen Links bei der Bearbeitung von Anfragen. Dies ermöglicht es, Dateien außerhalb des angegebenen Verzeichnisses bereitzustellen.
Frühere Versionen von Python bereinigten keine Steuerzeichen aus den Protokollnachrichten, die von python -m http.server oder der Standardimplementierung von .log_message in BaseHTTPRequestHandler an stderr gesendet wurden. Dies konnte dazu führen, dass entfernte Clients, die sich mit Ihrem Server verbinden, bösartige Steuerzeichen an Ihr Terminal senden konnten.
Geändert in Version 3.12: Steuerzeichen werden in stderr-Protokollen bereinigt.