Der eigentliche Zugriff auf eine Webseite geschieht übers Protokoll http oder https. Man kann zwar lokale html-Dateien direkt übers Dateisystem mit Doppelklick im Browser öffnen, aber dies bringt einige Einschränkungen mit sich. Zudem lässt sich so keine Webseite anschauen, die nicht auf dem eigenen Gerät gespeichert ist. Hierfür brauchen wir eine Webserver!
Python-Webserver
Mit Python kann sehr einfach ein Webserver auf dem eigenen Computer gestartet werden. Dazu muss nur das folgende Python-Programm in den Ordner mit der Webseite gespeichert werden:
from http.server import *
print('http://localhost:8000/')
server = HTTPServer(("", 8000), SimpleHTTPRequestHandler)
server.serve_forever()
Anschliessend wird das Programm mit dem Run-Knopf gestartet. Beim ersten Start erscheint eine Warnung von Windows, welche mit Zugriff zulassen akzeptiert werden muss:
Aufgabe: Eigener Webserver starten
- Starte wie oben beschrieben deinen eigenen Webserver.
- Teste den Webserver, indem du im Browser folgende Adresse eingibst:
http://localhost:8000
Aufgabe: Auf andere Webserver zugreifen
- Ermittle die IP-Adresse deines Computers und schreibe sie an die Wandtafel.
- Schaue dir die Webseite von anderen Schüler:innen der Klasse an, indem du im Browser deren IP-Adresse gefolgt von
:8000
eingibst.
Umlaute
Falls es Probleme mit Umlauten und Sonderzeichen gibt, kann das entweder im HTML oder auf dem Server gelöst werden:
(Unter der Voraussetzung, dass die HTML-Datei wirklich UTF8-codiert ist)
Encoding festlegen in HTML
Durch ein Meta-Element im Kopf der HTML-Datei kann man das Encoding explizit festlegen:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
...
Man muss das aber in jeder HTML-Datei tun!
Server soll UTF-8 liefern
Oder man «hackt» den Python-Server, so dass er standardmässig als charset
das gewünschte UTF-8
liefert:
from functools import partial
from http.server import SimpleHTTPRequestHandler, test
import os
print('http://localhost:8000/')
wk_dir = os.getcwd()
SimpleHTTPRequestHandler.extensions_map = {k: v + ';charset=UTF-8' for k, v in SimpleHTTPRequestHandler.extensions_map.items()}
test(HandlerClass=partial(SimpleHTTPRequestHandler, directory=wk_dir), port=8000, bind='')