Qgelm

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
schulung:statischer_http_server [2021/12/06 22:29] Thomasschulung:statischer_http_server [2022/01/11 16:28] (aktuell) – index.html Thomas
Zeile 27: Zeile 27:
  
         # da hat einer angebissen, jetzt die Daten des Requests:         # da hat einer angebissen, jetzt die Daten des Requests:
-        request = client_connection.recv(1024).decode()+        request = client_connection.recv(1024).decode("utf-8")
         print(request)         print(request)
  
Zeile 35: Zeile 35:
         #          \n ist das Sonderzeichen für Zeilenende         #          \n ist das Sonderzeichen für Zeilenende
         #         #
-        client_connection.sendall(response.encode())+        client_connection.sendall(response.encode("utf-8"))
         client_connection.close()         client_connection.close()
  
Zeile 72: Zeile 72:
   * **HEAD**: Spezialform des GET, es soll kein Inhalt übertragen werden. Der Browser will hier nur nachschauen, ob sich zwischenzeitlich an der Ressource etwas geändert hat oder ob ein erneutes GET gespart werden kann.   * **HEAD**: Spezialform des GET, es soll kein Inhalt übertragen werden. Der Browser will hier nur nachschauen, ob sich zwischenzeitlich an der Ressource etwas geändert hat oder ob ein erneutes GET gespart werden kann.
   * **POST**: Das ist die Form eines Requests, wenn der Browser dem Server auch noch Daten schicken will. Die können aus Formulareingabefeldern aus der Webseite stammen oder beispielsweise ein Datei zum Hochladen sein. Offensichtlich hat der Server dann etwas mehr zu tun. Die Daten werden auch hier nach der Leerzeile hinter der Requestzeile angehängt. Details dazu spare ich mir hier.   * **POST**: Das ist die Form eines Requests, wenn der Browser dem Server auch noch Daten schicken will. Die können aus Formulareingabefeldern aus der Webseite stammen oder beispielsweise ein Datei zum Hochladen sein. Offensichtlich hat der Server dann etwas mehr zu tun. Die Daten werden auch hier nach der Leerzeile hinter der Requestzeile angehängt. Details dazu spare ich mir hier.
-  * In späteren HTTP-Versionen kommen weitere Requesttypen dazu: PUT, DELETE, ... Die spielen aber beim Web-Surfen auch keine bedeutende Rolle.+  * In späteren HTTP-Versionen kommen weitere Request-Typen dazu: PUT, DELETE, ... Die spielen aber beim Web-Surfen auch keine bedeutende Rolle.
    
-Im wirklichen Leben macht sich ein [[Schulung:http_real_server|richtiger Web-Server]] etwas mehr Arbeit bei seinem Response...+Zu Übungszwecken ersetzen wir den etwas zu einfachen HTTP Server von eben mit dem nächst einfachen Modell, das jede Ressource in der URL als Dateinamen im aktuellen Verzeichnis interpretiert: 
 +<code> 
 +cd ~/Schulung/html 
 +echo "Dies ist ein Test." > test.txt 
 +python3 -m http.server 8000 
 +</code> 
 + 
 +und auf der //Client// Seite verwenden wir jetzt auch mal ein etwas leistungsstärkeres Erprobungstool: **curl** verhält sich wie ein richtiger Browser, gibt aber alle Request-Inhalte direkt als Text im Terminal aus. Beachte das **-v**! Damit wird die eigentliche http-Kommunikation mit rausgeschrieben, einschließlich aller Header-Zeilen:  
 + 
 +<code> 
 +curl -v http://localhost:8000/test.txt 
 +</code> 
 + 
 +Das Ergebnis sieht dann in Summe etwa so aus: 
 +{{:schulung:curl.png?direct}} 
 + 
 +Aber schon wenn man ein echtes (wenn auch recht einfaches) HTML Dokument auf diesem Weg anzeigen will, dann sieht man nicht viel. Beispiel für so eine Datei: 
 + 
 +<code html> 
 +<!doctype html> 
 + 
 +<html lang=de> 
 + 
 +<head> 
 +  <meta charset=utf-8> 
 +  <title>Schulungsseite</title> 
 +</head> 
 + 
 +<body> 
 +  <h1>Willkommen</h1>   
 +  <p>Diese Seite dient nur zu Schulungszwecken.</p> 
 + 
 +  <img src="nachbarn.png"></img> 
 + 
 +  
 +  <li> <a href="gollum.jpg">Dies ist ein Link auf ein weiteres Bild...</a> </li> 
 +  <li> <a href="existiert.nicht">und dieser Link provoziert eine 404 Fehlermeldung.</a></li> 
 + 
 +</body> 
 + 
 +</html> 
 +</code> 
 + 
 +Deshalb schauen wir uns das Ergebnis lieber in einem richtigen Browser an. 
 + 
 +Im wirklichen Leben macht sich außerdem ein [[Schulung:http_real_server|richtiger Web-Server]] etwas mehr Arbeit bei seinem Response...