webbroker a http.sys

vložil Radek Červinka 18. září 2018 22:34

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.

Tagy: ,

Praxe

Komentáře

23.9.2018 0:36:37 #

Stijn Sanders

I also have an open source web-platform for Delphi that uses http.sys, both HTTPAPI v1.0 and v2.0: https://github.com/stijnsanders/xxm/tree/master/Delphi/hsys

Stijn Sanders

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců