Od Windows XP SP2, resp. Windows Server 2003 operační systém windows obsahuje driver jádra pro obsluhu http požadavků s názvem http.sys. Ve skutečnosti se jedná o plný HTTP server a to přímo v jádře - což mimochodem znamená, že je na nižší úrovni než třeba IIS nebo Apache a bez veškerých závislostí.
Webbroker nabízí několik možností jak překládat výsledné aplikace (např. jako standalone web server), ale http.sys je prostě jiná liga. To si uvědomují i tvůrci komponent, jako např. TMS Sparkle - což je základem jejich nového Delphi web frameworku (pas to JS compiler) WebCore, nebo Intraweb.
A samozřejmě Open Source implementace - Synopse http.sys.
Pro úvod k http.sys si přečtete odkazované texty od TMS, Intrawebu a Synopse.
Bohužel implementace pro webbroker nebyla nijak publikována, resp. byla ale bez kompletních zdrojáků. Říkal jsem si, že by to stálo za to naprogramovat právě za použití uvedené Synopse knihovny, ale jeden programátor z Číny mne předběhl (ještě že tak…) a publikoval řešení pod názvem SynBroker - c5soft http.sys, s novější verzí SynBroker 0.9.1.0 - c5soft_201866152153 - pro jistotu local copy (0.5M).
Uvedené řešení je postavené na Synopse knihovně. Pokud si přečtete dřívější odkaz, tak se dozvíte, že normálně Vaše aplikace potřebuje admin práva pro běh, což není optimální, ale pokud předem registrujete Vaši aplikaci přes volání jako (vysvětlení viz synopse)
THttpApiServer.AddUrlAuthorize('root','888',false,'+'));
tak to třeba nebude.
Uvedený kód ke stažení jsem si nepatrně rozšířil o možnost předání parametru register (není součástí downloadu)
constructor TSynWebServer.Create(AOwner: TComponent);
begin
inherited Create;
FActive := False;
FOwner := AOwner;
if (FOwner <> nil) and (FOwner.InheritsFrom(TWebRequestHandler)) then
FReqHandler := TWebRequestHandler(FOwner)
else
FReqHandler := GetRequestHandler;
FIniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
FRoot := FIniFile.ReadString('Server', 'Root', '');
FPort := FIniFile.ReadString('Server', 'Port', '8080');
if ParamStr(1) = 'register' then
begin
THttpApiServer.AddUrlAuthorize(StringTOUTF8(FRoot), StringTOUTF8(FPort), False, '+');
halt(1);
end;
….
Pokud budete kód zkoušet, nezapomeňte přidat symbol pro podmíněnou kompilaci MORMOT a přidat zdrojáky mormotu, jinak se to přeloží jako normální webbroker aplikace.
Odezva od http.sys z uvedeného příkladu má pak v http hlavičce
Server: mORMot (Windows) Microsoft-HTTPAPI/2.0
X-Powered-By: mORMot 1.18 synopse.info
Accept-Encoding: deflate
Date: Tue, 18 Sep 2018 20:26:41 GMT
Content-Length: 216
200 OK
Je škoda, že Embarcadero nemá podporu http.sys v základu.
Jinak nejkomplexnější a nejzajímavější je podle mne řešení od TMS.