Fork časti HTTP komunikace

Rnx

Fork časti HTTP komunikace
« kdy: 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?


Bugsa

  • ***
  • 128
    • Zobrazit profil
    • E-mail
Re:Fork časti HTTP komunikace
« Odpověď #1 kdy: 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?

Re:Fork časti HTTP komunikace
« Odpověď #2 kdy: 05. 11. 2024, 16:02:01 »
Zvládlo by to istio 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.

Re:Fork časti HTTP komunikace
« Odpověď #3 kdy: 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.

_Jenda

  • *****
  • 1 605
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Fork časti HTTP komunikace
« Odpověď #4 kdy: 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?


Re:Fork časti HTTP komunikace
« Odpověď #5 kdy: Dnes v 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í.

Zopper

  • *****
  • 771
    • Zobrazit profil
Re:Fork časti HTTP komunikace
« Odpověď #6 kdy: Dnes v 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.

Re:Fork časti HTTP komunikace
« Odpověď #7 kdy: Dnes v 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.

Rnx

Re:Fork časti HTTP komunikace
« Odpověď #8 kdy: Dnes v 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á.