HTTP2

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
  • Das Zukunftsprojekt Polyzalos erfordert die Integration eines HTTP/2 Servers in OrgaMon
  • Im Moment entsteht deshalb ein HTTP/2 Server in FreePascal, Zielsystem ist im Moment auf Linux beschränkt
  • Alle Quelltexte befinden sich auf GitHub

Inbetriebnahme

openSSL

pacman -S openssl

Zertifikat

localhost

# mit "mkcert"
#
pacman -S mkcert
mkcert -install

# gehe in dein /hosts/localhost Verzeichnis
#
mkcert -cert-file cert.pem -key-file privkey.pem "localhost"
# mit "openssl"
#
#
openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -subj '/CN=localhost'
  • ein Hauptverzeichnis ausdenken und dort ein Verzeichnis pro CN erstellen
  • jeweils die 2 Dateien dort rein
  • Beispiel: Dein Server ist als "localhost" auf der Maschine selbst, und als "rom" im eigenen Netz, und als "orgamon-2.dyndns.org" von aussen ansprechbar, dann must Du 3x openssl rifen wir oben angegeben mit wechselnder CN
\srv\hosts\
  .\localhost\
     key.pem
     cert.pem
  .\rom\
     key.pem
     cert.pem
  .\orgamon-2.dyndns.org\
     key.pem
     cert.pem

local.orgamon.net

  • Ich habe bereits ein letsencrypt *.orgamon.net Zertifikat
  • Ich habe (bei schlundtech) "local.orgamon.net" auf 127.0.0.1 zeigen lassen (A-Record)
  • Ich habe in der Fritz!Box die Ausnahme für den lokalen Rebindschutz eingetragen (für "local.orgamon.net")
  • privkey.pem und cert.pem kann ich so für den Webserver nutzen
  • Meine Entwicklungsumgebung kann somit die lokale Maschine sein, obwohl ich eine richtige Domain angebe deren Namensauflösung im Web läuft

Pascal -> JavaScript

Durch den Wegfall der GUI muss Code auf der Client GUI autark laufen können. Dieser soll im OrgaMon Programm als FreePascal-Code aufnotiert werden, die compilierung teilt den Code auf (Client Code / Server Code) und verteilt das Java-Script über den HTTP2 Server. Freepascal hat schon eine Implementierung die Pascal nach JS ermöglicht.

Details:

  • Die Tatsache "JavaScript" auf der Clientside wird der Lazarus-IDE scheinbar verheimlicht
    • Es muss also der Pascalcode in JavaScript umgewandelt werden
    • Für den Client muss eine Art Code-Lib zur Verfügung stehen, die Pascal rufen kann und umgekehrt
  • Die IDE soll denken/vorleben das Client-Seitig auch "Pascal" gesprochen wird
    • Debugging: Hier muss der WebClient in den remote-Debugging Modus gebracht werden
    • Es könnte die Infrastruktur der "Source maps" verwendet werden, also "komprimierte" Zeilen des JavaScript Quellcodes zeigen auf die entsprechenden Zeilen, die in FreePascal formuliert sind. Es werden also "fake"-Source-Maps zur Verfügung gestellt, so das eine korrekte 1:1 Beziehung zwischen Pascal und Javascript bestehen kann.
    • FreePascal und die Lazarus IDE müssen lernen, dass Teile vom Quelltext "remote" executables sind
    • FreePascal Lazarus muss Möglichkeiten bieten von einem eintretendem JAvaScript Breakpoint gerufen zu werden
    • Es soll alles auch in der Lazarus IDE mit Break-Points programmierbar sein, die IDE soll ein Verständnis haben welche Zeile welchen Code verbirgt
  • Die IDE sollte den Client-Side Part ev. farblich hinterlegen?!
  • Es muss so sein, dass eine Unit weiterhin ServerSide- / ClientSide- Code mischen kann
program SimpleCalculator;

var
 Panel : TPanel;
 Button1 : TButton;
 Button2 : TButton;
 
procedure Panel.OnClick;
begin
 beep; // This goes to JavaScript Client Code
end;

procedure Button1.OnClick;
begin
 Button2.Disable; // This goes to JavaScript Client Code
end;

procedure Button1.OnClick;
begin
 Button2.Disable; // This goes to JavaScript Client Code
end;

begin
 App.add(Panel);
 App.add(Button1);
 App.add(Button2);
end.


  • die IDE soll ein Verständnis haben dass auf Client-Seite nicht "alles" Programmierbar ist
  • aus den JavaScript Parts soll über einen Dispatcher der nonGUI Code aufbar gemacht werden
  • In einer Datenbank soll das Know-How für die Web Objekte gespeichert sein

Retry-, Reconnect- Fähig

  • immer eine lang stehende Keep-Alive TCP Verbindung, mit "Full Reconnect"- und "Client-IP-Change"- Möglichkeit
  • Ein kleines Symbol oder eine Uhr, oder ich weis noch nicht, soll symbolisieren wenn es sich um eine frisch aufgebaute Verbindung handelt
  • Es. soll eine Reconnect auch visualisiert werden, oder auch ein Verbindungsende / Abbruch
  • Die Dev Tools haben im "Netzwerk" ein Toggle oder OFFLINE Knopf um das zu testen

Meilensteine

20.03.2026 SSE für /log in die Client Console
08.12.2023 Feature Freeze: Funktionalität für ServiceWorker und sqlite3.wasm Test ausreichend
01.12.2023 RFC: "WINDOW_UPDATE" verbessert
26.11.2023 erster "polyzalosd.exe" mit Setup für Win64
18.11.2023 Server läuft als Konsolen-App
14.11.2023 Auslieferung von DATA>MAX_FRAME_SIZE
10.11.2023 openSSL 3.1.4 mit TLS 1.3, erstmals von der RFC 9113 erfahren, Festlegung auf Chrome als Client
24.02.2022 openSSL 3.0.1 mit TLS 1.3
13.10.2021 Umstellung auf OpenSSL 3, bisher noch mit ACCEPT Fehler
23.10.2020 erste Seite wird ausgeliefert
12.11.2018 FRAME / HPACK decoding im laufenden Betrieb möglich
08.11.2018 Firefox 63 macht leider keine TLS 1.3 Verbindung, aber immerhin TLS 1.2
26.06.2018 Firefox 61 mit nativ aktiviertem TLS 1.3 ist erschienen
24.11.2017 Erster Client Hello via Read-Thread
23.08.2017 Erster Client Hello von Chrome
14.08.2017 Erster Client Hello von Firefox

todo

  • HTTP/2 erste Login Seite
  • OLAP -> Migration auf Console
  • Auswertung -> Migration auf Console
  • OrgaMon Workflow Sheet?!
  • zstd shared-compression-dictionaries

Screen-Shots