feat(core): FILIUS' web server and web browser after Java, measured against Java

The servers share ServerAnwendung's frame (server.ts); the web server serves
/webserver with virtual hosts, the browser loads a page and its images over
one connection to port 80 (web.ts); HTTP in Java's text form (http.ts).
WebRun records eleven stories on the new web-lan network, with the server's
files; webJava.test.ts plays them card by card. A program's close is a
request, as Java's schliessen. Not taken from Java: /../ serving any file of
the host; an unreadable request closing the connection without a word.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 16:53:00 +00:00
co-authored by Claude Opus 5.5
parent de3a1d4dfe
commit 4cd5749350
33 changed files with 53601 additions and 216 deletions
+37
View File
@@ -580,3 +580,40 @@ Gemessen (01.10.2026):
dazwischen; so misst es `otherPort`.
* Der Client sendet nur ein SYN (wie bei `TcpRun`, `closedPort`).
## Webserver und Browser (F3.2a)
`WebRun` installiert auf dem Netz von `web-lan` (Browser 192.168.0.20,
DNS-Server .10, Webserver .30, ein Rechner ohne Webserver .31) Filius'
Webserver, eingeschaltet auf Port 80, mit den Dateien, die Filius ihm gibt
(`index.html` und ihr Bild), und eigenen (Seite mit Bildern, Text, Namen mit
Leerzeichen und Umlaut, virtuelle Hosts in `/www.conf/vhosts`, eine Datei
außerhalb von `/webserver`). Eine Adresse wird eingetippt wie ins Fenster und
wie dort zur URL (`erzeugeURL`). Es schreibt die Frames jeder Karte, Javas
Tabellen, die Fensterzeilen des Servers, was der Browser seinem Fenster
meldet (Seite mit Status, Inhaltsart und Text, oder „update“ für ein Bild),
und alle Dateien des Servers am Ende. Abläufe: `page`, `byName`,
`notFound`, `vhost`, `noServer`, `unresolved`, `post`, `encoded`,
`traversal`, `caseInsensitive`, `raw` (der einfache Client spricht mit dem
Server).
Gemessen (01.10.2026):
* Der Browser verbindet sich immer mit Port 80; die Adresszeile nimmt keinen
Port (Javas Muster für Hosts). Ein Schrägstrich am Ende fällt weg
(`String.split`), `/vhost1/` ist dann ein Ordner und 404.
* Je Seite eine Verbindung: Seite, dann jedes `<img>` nacheinander (das rohe
`src`, auch `IMG SRC='…'` und ohne Anführungszeichen, relativ ohne
führenden Schrägstrich), dann schließen. Ein Bild kommt als Javas Base64
mit Zeilenumbruch nach 76 Zeichen.
* Pfade gehen kodiert (`UriUtils.encodePath`: `%20`, `%C3%BC`), die Anfrage
ohne Abfrage (`getPfad`), mit dem Host, wie er eingetippt wurde.
* `GET /../geheim.txt` liefert `/geheim.txt`: Javas Dateisystem löst `..`
auf, der Server prüft nicht, ob es unter `/webserver` bleibt.
* Gesucht wird ohne Rücksicht auf Groß- und Kleinschreibung (Name und Host).
* „HALLO“ oder „GET /“ ohne Version: `HTTPNachricht` wirft, der Thread des
Servers schließt die Verbindung und meldet `null`.
* Beim Wechsel der Seite geht die DNS-Anfrage der neuen Seite vor dem FIN der
alten: `schliessen()` bittet den Socket-Thread nur.
* Die Fehlerseiten macht der Browser selbst (im Messaufbau Javas Ersatztext,
weil die Vorlage fehlt); der Vergleich sieht nur den Status.