- PureBasic 80.9%
- Shell 14.2%
- Python 2.9%
- Makefile 1.9%
- JavaScript 0.1%
Behebt den realen purepower-Prod-Crash (WS-System-Channel-Broadcast aus App-Thread → H2_Stream::SendData → NET_Core-Owner-Thread-Guard → SIGABRT). WS-H2-Server-Push wird jetzt aus Nicht-Worker-Threads an den owning Data-Worker marshallt. WS_TestSuite Section 20 (_TestWSCrossThreadSendMarshals) als Regression. make test 10/10. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| bench_results | ||
| http_doc | ||
| http_lib@537c488f9a | ||
| http_tests | ||
| lhs_lib@f19c0a6e64 | ||
| lhttpd | ||
| net_doc | ||
| net_lib@6fada226b6 | ||
| .gitignore | ||
| .gitmodules | ||
| CLAUDE.md | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
PureBasic HTTP Stack V3.9.2 — Beta für V4.0.0
Triple-Protocol HTTP Server & Client + WebSocket — HTTP/1.1 · HTTP/2 · HTTP/3
Beta-Hinweis: Dieser Release ist die Beta-Vorstufe für V4.0.0 (Public-Struct-Cascade auf
lhs_arena::HashMap). Der V4.0-Cascade ist seit 2026-05-14 produktiv im Code; das v4.0.0-Tag wird gesetzt, sobald sich der purepower-framework-Konsument auf dem aktuellen Stand stabilisiert hat. Bis dahin trägt der Stack die Versionsnummer V3.9.2 (Sicherheits- und Thread-Safety-Fixes aus dem Kimi-Code-Review 2026-05-20).
Übersicht
Ein vollständiger, hochperformanter HTTP-Stack in PureBasic mit nativem Support für alle drei HTTP-Generationen:
| Protokoll | Standard | Features |
|---|---|---|
| HTTP/1.1 | RFC 7230–7235 | Zero-Copy State-Machine Parser, Chunked Transfer |
| HTTP/2 | RFC 9113 | Binary Framing, HPACK, Stream Multiplexing, Push |
| HTTP/3 | RFC 9114 | QUIC Transport, QPACK, 0-RTT, Connection Migration |
13 HTTP-Module · ~26'000 Codezeilen · 1510/1510 Tests bestanden (10 Suiten)
Basierend auf dem NET Stack v5.6.1 mit nativem QUIC, GSO/GRO, ECN, Pacing und eventfd-Wake. Per-Connection-Arena via lhs_lib (lhs_arena::HashMap, Bytes-API, Bump-Allokationen).
Features
- Triple-Protocol Transparency — Ein einziges API für H1, H2 und H3; Protokollwahl erfolgt automatisch (ALPN)
- QUIC / HTTP/3 — Native OpenSSL 3.5 QUIC Integration, QPACK Header-Kompression, H3 Framing
- HTTP/2 — Full Binary Framing, HPACK, Server Push, h2c Cleartext Support
- TLS / HTTPS — OpenSSL-basiert mit SNI Multi-Domain und ALPN Negotiation
- ACME / Let's Encrypt — Automatische Zertifikatsbeschaffung und -erneuerung
- Routing — Named Parameters (
:id), Wildcards (*path), Spezifitäts-Ranking, Virtual Hosts - Interne PKI — Self-Signed Zertifikate, Interne Root CA, Auto-TLS (V3.4)
- Static File Serving — Range Requests (HTTP 206), Directory Index, Path-Traversal-Schutz
- HTTP Client — Vollständiger Client mit H1/H2/H3 Support, Downloads, Protokoll-Fixierung
- QUIC Performance — GSO/GRO Batch-Sends, ECN Congestion Notification, Pacing (NET V5.3)
Neu in V3.9.2 (Beta für V4.0.0)
Kimi-Code-Review 2026-05-20 — 11 Tickets in einem Sprint behoben:
- HTTPLIB-15 _StoreHeader-Parse-Position bei Content-Length-Fehlern: undefiniertes
pos→*conn\hdr_value_start. - HTTPLIB-16 H3 Reentrant-Deadlock + Lock-Over-Callback:
_h3_ctx_mutexwird nicht mehr über die H3_Stream-Callback-Kette gehalten. - HTTPLIB-17
_extracted_paramsglobal → Per-Request Arena-Map: behebt H2/H3-Multiplexing-Race bei Route-Params. - HTTPLIB-18 H3 Body ohne
max_body_size-Limit (DoS-Vektor): Content-Length-Pre-Check + per-DATA-Frame-Check, sauberes 413 + Stream-Cleanup. - HTTPLIB-19 Body-Timeout sendet jetzt 408: war zuvor schlicht
Break— Slow-POST-Schutz war wirkungslos. - HTTPLIB-20 Range-Support über H2/H3 + Streaming-Pfad: ServeFile akzeptiert
*req, liest Range aus der Arena-Header-Map, streamt ab 1 MB in 64 KB-Chunks. - HTTPLIB-21 Static- und WS-Routes Thread-Safe: eigene Mutexe um
_static_routesund_ws_routes. - HTTPLIB-22 H3
_H3_FindConnIdO(1) via Reverse-Map; Pending-Arena von 8 KB → 2 KB Initial. - HTTPLIB-23 Dead-Code raus (
_HTTP_RedirectToHTTPS),_IsHdrNameLCase vor Schleife,_StatusText/_HTTPDate→HTTP_Protokoll-Wrapper. - HTTPLIB-24 Alt-Svc-Doppelung im
_BuildAndSendentfernt;_MatchSegmentsbyte-Compare statt LCase-pro-Segment. - HTTPLIB-25 Neue Test-Suite
Concurrent_Stress_TestSuite(27 Tests) als Regression-Suite.
Neu in V3.9.1 (Beta für V4.0.0)
V4.0 Public-Struct-Cascade — HTTP_Request.headers, HTTP_Request.query_params und HTTP_Response.headers sind ab V4.0 keine Map x.s() mehr, sondern *lhs_arena::HashMap. Alle 17 betroffenen Procedure-Signaturen in HTTP_Protokoll, HPACK_Codec, QPACK_Codec, H2_Stream, H3_Stream und die _H3_RequestHandler-Callback wurden mitkaskadiert. Handler-Code nutzt HTTP_Server::PrepareResponse(@res, connection_id) zur Arena-Vorbereitung — Beispiele im Demo-Doc.
Per-Connection-Arena — Bei Accept eine lhs_arena::Create(65536), Reset per Request, Destroy beim Close. Keine malloc/free-Paare im Request-Pfad. Allocations werden gemeinsam disponiert; Multi-Threaded ohne PB-Heap-Locks.
Header-Parse Hot-Path (HTTPLIB-4) — Header-Bytes gehen direkt aus dem Socket-Buffer über lhs_arena::MapSetBytes in die Arena, ohne PeekS/LCase. Case-Insensitive Lookup via FNV-1a + branchless ASCII-Lowercase. Multi-Value-Header (Cookie, Forwarded) werden im Arena-Bump zusammengesetzt.
Response-Build via Arena-Builder (HTTPLIB-5) — Neuer _RBuilder baut Status-Line, Auto-Headers, User-Headers und Body direkt in die Arena. Kein PB-String-Concat, kein PokeS-Roundtrip; ein einzelnes SendAll.
WebSocket über H2/H3 — Extended CONNECT (RFC 8441 + RFC 9220) zusätzlich zum klassischen H1-Upgrade. Gleicher RegisterWebSocket() für alle drei Protokollversionen; Server announcet SETTINGS_ENABLE_CONNECT_PROTOCOL=1 automatisch.
HPACK doppelter UTF8-Roundtrip raus (HTTPLIB-2) — _HuffmanEncodedLengthBytes + _HuffmanEncodeBytes arbeiten jetzt direkt auf einer einmaligen UTF8-Bytefolge.
ACME auf lhs_json (HTTPLIB-10/11) — ACME_Protokoll.pbi nutzt für alle Parse/Compose-Pfade lhs_json statt PB-ParseJSON/ComposeJSON. Crypto-Builds (JWK, JWS) sind byte-stabil.
XIncludeFile "http_lib/HTTP_Server.pbi"
Procedure Hello(connection_id.i, *req.HTTP_Protokoll::HTTP_Request)
HTTP_Server::RespondText(connection_id, 200, "Hello World!")
EndProcedure
HTTP_Server::Init()
HTTP_Server::RegisterRoute("GET", "/", @Hello())
HTTP_Server::Start("0.0.0.0", 8080)
Testen: curl http://localhost:8080/
Für HTTPS + HTTP/2:
HTTP_Server::SetCertificate("cert.pem", "key.pem")
HTTP_Server::StartTLS("0.0.0.0", 443)
; ALPN "h2,http/1.1" wird automatisch konfiguriert.
; Handler-Code ist für HTTP/1.1 und HTTP/2 identisch!
Noch schneller (V3.4 Auto-TLS — kein Zertifikat nötig):
XIncludeFile "http_lib/HTTP_PKI.pbi" ; ← VOR HTTP_Server!
XIncludeFile "http_lib/HTTP_Server.pbi"
HTTP_Server::Init()
HTTP_Server::RegisterRoute("GET", "/", @Hello())
HTTP_Server::StartTLS("0.0.0.0", 443) ; → Self-Signed wird automatisch generiert
Für ausführliche Beispiele (inkl. Routing, PKI, VHosts) siehe die Demos & Benutzung.
Modulübersicht
HTTP-Module (http_lib/) — V4.0-Cascade aktiv
| Modul | Beschreibung |
|---|---|
| HTTP_Server.pbi | Triple-Protocol Webserver (H1/H2/H3), Per-Connection-Arena, _RBuilder, Routing, VHosts, TLS, Auto-TLS, WS-Upgrade |
| HTTP_Client.pbi | Triple-Protocol Client (H1/H2/H3), Downloads, Pooling, Protokoll-Fixierung |
| HTTP_PKI.pbi | Interne PKI: Self-Signed, Root CA, Auto-TLS |
| HTTP_Protokoll.pbi | Protocol Core: Methods, Status, URL, MIME, Pseudo-Headers + HGet/HSet/HExists/HCount/HInit/HClear Arena-Header-Helper |
| ACME_Protokoll.pbi | Let's Encrypt ACME v2 (via lhs_json für JWK/JWS, byte-stabil), HTTP-01, Auto-Renew |
| H2_Stream.pbi | HTTP/2 Connection/Stream Manager, Flow-Control, Push, Extended CONNECT für WS |
| H2_Frame.pbi | HTTP/2 Frame Parser & Builder (RFC 9113) |
| HPACK_Codec.pbi | HTTP/2 Header-Kompression (RFC 7541) — Single-UTF8-Hot-Path |
| H3_Stream.pbi | HTTP/3 Session/Stream Manager (RFC 9114), Extended CONNECT für WS |
| H3_Frame.pbi | HTTP/3 Frame Parser & Builder |
| QPACK_Codec.pbi | HTTP/3 Header-Kompression (RFC 9204) |
| WS_Frame.pbi | WebSocket Frame-Layer (RFC 6455) — Masking, Fragments, Control-Frames |
| WS_Connection.pbi | WebSocket Connection-Manager — H1/H2/H3 transparent via ProtoTransportSend |
Submodule
- net_lib v5.6.1 — NET Stack: epoll, sockets, TLS_OpenSSL, native QUIC, eventfd-Wake
- lhs_lib master —
lhs_arena(HashMap, FlatList, Bytes-API),lhs_json,lhs_log,ldl
Dokumentation
API-Referenz
| Dokument | Beschreibung |
|---|---|
| API-Referenz | Übersicht und Einstiegspunkt |
| API-Standard | HTTP_Server + HTTP_Client + ACME — alles was ein Anwender braucht |
| API-Experten | Protokoll-Internals: H2/H3/HPACK/QPACK für Framework-Entwickler |
Demos & Beispiele
| Dokument | Beschreibung |
|---|---|
| Demos & Benutzung | Übersicht und Einstiegspunkt |
| Demo-Standard | Quick Start, Routing, Static Files, VHosts, Client, ACME |
| Demo-Experten | Triple-Protocol, SSE, Server Push, h2c, Protokoll-Fixierung |
Tests
1510/1510 Tests bestanden (V3.9.2, Mai 2026):
| Test Suite | Tests | Beschreibung |
|---|---|---|
| H1_HTTP_Protokoll_TestSuite | 328 | HTTP/1.1 Core, URL Encoding, MIME, Headers, H2/H3 Helpers |
| H2_TestSuite | 501 | HPACK, H2_Frame, Integration, RFC 9113 Compliance, Stress |
| H3_Frame_TestSuite | 142 | HTTP/3 Frame Encoding/Decoding (RFC 9114) |
| H3_Stream_TestSuite | 82 | HTTP/3 Session/Stream Manager |
| QPACK_TestSuite | 114 | HTTP/3 Header-Kompression (RFC 9204) |
| V34_Routing_PKI_TestSuite | 87 | Named Params, Wildcards, Spezifität, SNI, PKI |
| Upload_TestSuite | 55 | Binary Upload (0 B – 10 MB), Multipart, CRC32, Echo-Roundtrip, 413 |
| WS_TestSuite | 72 | WebSocket Frame + Connection, H1/H2/H3 Transport-Abstraktion |
| Arena_Lifecycle_TestSuite | 102 | Per-Connection-Arena + HashMap/FlatList API Compliance |
| Concurrent_Stress_TestSuite | 27 | Regression-Tests für Kimi-Sprint (HTTPLIB-15..25) |
Komplette Suite + Build:
make # Alle 10 Suiten kompilieren
make test # Build + Run (1510 Tests)
make test-h1 # Einzelne Suite
make test-ws # WebSocket-Suite
make clean # Build-Artefakte loeschen
Hinweis: Der gesamte HTTP Stack benötigt das C Backend (
pbcompilercbzw.--backend c). Grund:atomic-ops.pbiverwendet C-Inline Atomics — darauf bauen Lock-Free Queue, NET_Core und der gesamte Stack auf.
Voraussetzungen
- PureBasic 6.x (Linux x64, C Backend —
pbcompilerc/--backend c) - OpenSSL 3.5+ (für TLS und QUIC)
- Linux mit epoll-Support (Kernel 2.6+, Kernel 4.18+ für QUIC GSO)
Lizenz
Dieses Projekt ist dual-lizenziert:
LGPL 2.1 (Open Source)
Für Open-Source-Projekte steht die Bibliothek unter der GNU Lesser General Public License v2.1 zur Verfügung. Du kannst die Bibliothek frei in eigenen Projekten verwenden, solange Änderungen an der Bibliothek selbst unter LGPL veröffentlicht werden.
Kommerzielle Lizenz
Für den Einsatz in proprietären oder Closed-Source-Projekten ohne LGPL-Pflichten ist eine kommerzielle Lizenz verfügbar.
📧 Kontakt: info@lihaso.ch
Entwicklung & Vibe Coding 🤖
Dieses Projekt wurde im Vibe-Coding-Stil entwickelt — in enger Zusammenarbeit zwischen Mensch und KI. Folgende KI-Assistenten waren am Entwicklungsprozess beteiligt:
| KI-Assistent | Anbieter |
|---|---|
| Claude | Anthropic |
| Grok | xAI |
| ChatGPT | OpenAI |
| Mistral | Mistral AI |
| DeepSeek | DeepSeek |
| Qwen 2.5 Coder | Alibaba (lokal via Ollama) |
Vibe Coding = Der Mensch steuert Architektur, Design und Qualitätsanspruch. Die KI unterstützt bei Implementierung, Refactoring, Tests und Dokumentation. Das Ergebnis: Schnellere Iteration bei gleichbleibend hoher Code-Qualität.
Kontakt
Linder Hard- und Software René Linder
Projektstruktur
.
├── README.md # Diese Datei
├── LICENSE # LGPL 2.1 Lizenztext
├── .gitignore
│
├── http_lib/ # HTTP-Module (11 .pbi)
│ ├── HTTP_Server.pbi
│ ├── HTTP_Client.pbi
│ ├── HTTP_PKI.pbi # V3.4: Interne PKI, Self-Signed, Root CA
│ ├── HTTP_Protokoll.pbi
│ ├── ACME_Protokoll.pbi
│ ├── H2_Stream.pbi / H2_Frame.pbi / HPACK_Codec.pbi
│ └── H3_Stream.pbi / H3_Frame.pbi / QPACK_Codec.pbi
│
├── http_tests/ # Testsuites & Test-Programme
│ ├── H1_HTTP_Protokoll_TestSuite.pbi # 323 Tests
│ ├── H2_TestSuite.pbi # 501 Tests
│ ├── V34_Routing_PKI_TestSuite.pbi # 87 Tests (V3.4)
│ ├── Upload_TestServer.pb / Upload_TestClient.pb # 43 Tests
│ ├── H3_Frame_TestSuite.pbi / H3_Stream_TestSuite.pbi
│ ├── QPACK_TestSuite.pbi
│ └── client_*.pb / pb-wget.pb
│
├── http_doc/ # HTTP-Dokumentation
│ ├── HTTP_API-Referenz.md # Index → Standard + Experten
│ ├── HTTP_API-Standard.md # Server + Client + ACME + PKI API
│ ├── HTTP_API-Experten.md # H2/H3/HPACK/QPACK Internals
│ ├── HTTP_Demo-Benutzung.md # Index → Standard + Experten
│ ├── HTTP_Demo-Standard.md # Praxis-Beispiele
│ └── HTTP_Demo-Experten.md # Fortgeschrittene Szenarien
│
├── net_lib/ # NET Stack (separates Repository)
└── net_doc/ # NET Dokumentation (separates Repository)