Fork časti HTTP komunikace

Rnx

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