Fórum Root.cz

Hlavní témata => Server => Téma založeno: Rnx 05. 11. 2024, 12:51:01

Název: Fork časti HTTP komunikace
Přispěvatel: Rnx 05. 11. 2024, 12:51:01
Ahoj, ako by ste riešili fork http komunikácie, kde na jednej strane (klient) odošle http POST, a v prípade že na druhej strane server odpovie OK (200), tak tento load od klienta bude forknutý aj na tretiu stranu? Server nemám možnosť ovplyvniť, klient (rôzni klienti) bude posielať i rôzne GETy, ktoré by mali byť ignorované, resp. iné http statusy než 200 taktiež. Utilita môže byť "in the middle", so všetkým čo k tomu patrí (vlastné tls, ip:port, java, .net, čokoľvek). Dokáže toto nejaký opensource?
Název: Re:Fork časti HTTP komunikace
Přispěvatel: Bugsa 05. 11. 2024, 14:32:20
Jaký to má use case? Proč nemůže klient po obdržení 200 od serveru prostě poslat nový GET/POST na třetí stranu?
Název: Re:Fork časti HTTP komunikace
Přispěvatel: greenlinuxguru 05. 11. 2024, 16:02:01
Zvládlo by to istio https://istio.io/latest/docs/tasks/traffic-management/mirroring/ (https://istio.io/latest/docs/tasks/traffic-management/mirroring/) dá se tam nastavit i policy, že se to aplikuje jen na POST, případně mimo kubernetes envoy.

Případné přesné nastavení bych si asi vygeneroval přes ChatGPT než se patlat v dokumentaci.
Název: Re:Fork časti HTTP komunikace
Přispěvatel: Filip Jirsák 05. 11. 2024, 18:45:15
Musíte klonovat všechny požadavky typu POST (případně podle dalších kritérií), a pak na základě odpovědi odfiltrovat ty, které vás nezajímají. Nejprve se posílá požadavek, pak teprve na něj přijde odpověď, takže v době mirrorování požadavku ještě neznáte odpověď a nevíte, zda je to ten, který vás zajímá.

Asi to půjde nakonfigurovat v lepších reverzních proxy, případně můžete použít mitmproxy (https://mitmproxy.org).
Název: Re:Fork časti HTTP komunikace
Přispěvatel: _Jenda 05. 11. 2024, 20:05:37
Ahoj, ako by ste riešili fork http komunikácie, kde na jednej strane (klient) odošle http POST, a v prípade že na druhej strane server odpovie OK (200), tak tento load od klienta bude forknutý aj na tretiu stranu? Server nemám možnosť ovplyvniť, klient (rôzni klienti) bude posielať i rôzne GETy, ktoré by mali byť ignorované, resp. iné http statusy než 200 taktiež. Utilita môže byť "in the middle", so všetkým čo k tomu patrí (vlastné tls, ip:port, java, .net, čokoľvek). Dokáže toto nejaký opensource?
Ano, toto jsem dělal tak, že jsem si napsal program v Pythonu, který se tvářil jako HTTP server (socketserver.StreamRequestHandler - HTTP implementováno naivně jako "přečtu první řádek požadavku a rozhodnu se jestli je to POST/GET/..."), požadavek přeposlal (req = urllib.request.Request(url); req.add_header(hlavičky_původního_požadavku)) a pak zase odpověď poslal zpátky. Klient pak tento server používal jako HTTP proxy (šlo by i bez spolupráce klienta pomocí MITM).

Nerozumím tedy co znamená "forknutý aj na tretiu stranu" - jako že ho někomu vnutíš (jak? HTTP vyžaduje aby klient nejdřív poslal požadavek)? Nebo že ho uložíš do souboru?
Název: Re:Fork časti HTTP komunikace
Přispěvatel: Marek Staněk 06. 11. 2024, 09:05:51
Kolega to kdysi dělal pro účel záznamu, co uživatel dělá a kam leze, a pozdější replay za účelem vyhodnocení.
Název: Re:Fork časti HTTP komunikace
Přispěvatel: Zopper 06. 11. 2024, 09:42:37
Otázka ovšem nezní jako logování. Pokud už můžu mít uprostřed cesty vlastní MITM, můžu tam rovnou tvořit logy, a bude to mnohem snazší, než nějaké forkování. Spíš to na mě působí jako nějaký divný pokus o přihlášení k více systémům najednou, nebo nějaký podobný případ, ale tam mi to taky nedává smysl - klient nemůže dostat odpověď z více serverů. Záhady, samé záhady.
Název: Re:Fork časti HTTP komunikace
Přispěvatel: hknmtt 06. 11. 2024, 09:52:01
Ahoj, ako by ste riešili fork http komunikácie, kde na jednej strane (klient) odošle http POST, a v prípade že na druhej strane server odpovie OK (200), tak tento load od klienta bude forknutý aj na tretiu stranu? Server nemám možnosť ovplyvniť, klient (rôzni klienti) bude posielať i rôzne GETy, ktoré by mali byť ignorované, resp. iné http statusy než 200 taktiež. Utilita môže byť "in the middle", so všetkým čo k tomu patrí (vlastné tls, ip:port, java, .net, čokoľvek). Dokáže toto nejaký opensource?

V Go to mas nakodene nativne, bez externych kniznic, na 10 riadkov.
Název: Re:Fork časti HTTP komunikace
Přispěvatel: Rnx 06. 11. 2024, 10:38:28
Elasticsearch/Opensearch nemá trigger a niektoré špecifické data, ktoré do neho tečú, potrebujem obohatiť o údaje z iných systémov (SAP, PGress, logy). Jednak tie data párujem a sú potom ľahšie dohľadateľné a jednak je z nich možné dopočítavať ďalšie údaje (napr. celková cena, objem, čas skrz všetky operácie/tooly). Dá sa to riešiť logstashom alebo fluentom tak, že periodicky kontrolujem Elastic na prítomnosť "nových" dát, ničmenej v prípade ich veľkého množstva je to pomalé a blbé na resources, v prípade malého zase neefektívne. Takže hľadám trigger, ktorý mi povie, že ak dorazi nová správa, rozbehni sync s X ďalšími systémami, ktoré tú správu doplnia.
Preroutovať celú komunikáciu napr. cez logstash nejde, pretože do/z elasticu tečú z jedného systému POST, GET. Netuším ani, či by v tomto nepomohol nejaký message queue (RabbitMQ?), preto hľadám http fork, ktorý ten POST po úspešnom uložení len forwardne ďalej, napr. na FluentD, ktorý sa potom o enrichment postará.