Mi az a proxy?

A proxy egy közvetítő kiszolgáló, amely egy ügyfél (például az alkalmazás) és a célkiszolgáló (például egy háttér API) között helyezkedik el. Amikor az alkalmazás kérést küld, a proxy kapja meg először. A proxy ezután továbbíthatja a kérést a célkiszolgálónak, módosíthatja, letilthatja vagy közvetlenül visszaadhatja a választ.

Röviden: a proxy az ügyfél vagy a kiszolgáló nevében jár el a kommunikáció közvetítése érdekében.

A proxy működése

A proxyk HTTP-szinten (vagy más alkalmazásprotokollokon) működnek a bejövő kérések fogadásával és az alábbi műveletek közül egy vagy több végrehajtásával:

  • A kérés továbbítása a célkiszolgálóra, majd a válasz visszahelyezése az ügyfélnek.
  • A fejlécek, URL-címek vagy hasznos adatok módosítása továbbítás előtt.
  • A kérés helyi elfogása és megválaszolása a célkiszolgálóval való kapcsolatfelvétel nélkül.
  • A kérés elutasítása szabályok vagy hozzáférési szabályzatok alapján.

Az ügyfél szempontjából egyszerűen elküld egy kérést egy URL-címre. A proxy minden mást kezel a színfalak mögött. Az mintázat az ügyfélről a proxyra, majd a célkiszolgálóra irányul.

Ez a minta egy szabályozási és absztrakciós réteget vezet be, amellyel javíthatja a biztonságot, a megfigyelhetőséget, a teljesítményt és a tesztelhetőséget.

Proxyk típusai

Különböző típusú proxyk léteznek. Mindegyik megfelel a rendszerarchitektúra adott szerepköreinek.

Proxy továbbítása

Egy előremutató proxy található az ügyfél előtt. Amikor az alkalmazás kérést küld, az áthalad a proxyn, amely eldönti, hogy az alkalmazás továbbítható-e és hogyan. A továbbítási proxykat általában a következőkre használják:

  • A külső erőforrásokhoz való hozzáférés szabályozása.
  • Az ügyfélforgalom anonimizálása.
  • Naplózza a kimenő forgalmat a figyeléshez.
  • Tartalomszűrés vagy átalakítás alkalmazása.

Fordított proxy

A fordított proxy a kiszolgáló előtt helyezkedik el. Az ügyfelek nem ismerik az alapul szolgáló háttér-infrastruktúrát. A fordított proxy fogadja a bejövő kéréseket, és továbbítja őket a háttérkiszolgálók egyikének. A fordított proxykat általában a következőkre használják:

  • A terheléselosztás több szolgáltatás forgalmát is kiegyensúlyozza.
  • Gyorsítótárazott válaszok kiszolgálása a háttérrendszer terhelésének csökkentése érdekében.
  • TLS-/SSL-kapcsolatok leállása.
  • Belső szolgáltatásadatok elrejtése a nyilvános internetről.

Átlátszó proxy

A transzparens proxy anélkül irányítja le a forgalmat, hogy az ügyfél kifejezetten konfigurálva lenne a használatára. Ezt a típust vállalati vagy internetszolgáltatói környezetekben használják a szabályzatok kikényszerítésére vagy a használat figyelésére.

Miért fontosak a proxyk az alkalmazásfejlesztők számára?

Gyakran az infrastruktúra vagy a hálózati csapatok kezelik a proxykat. A proxyk azonban közvetlenül befolyásolják az alkalmazás viselkedését, különösen a fejlesztési és tesztelési környezetekben. Az alábbiakban néhány gyakorlati módszert talál, amelyek hatással vannak a mindennapi munkájára.

Hibakeresés és megfigyelhetőség

A proxyk képesek a HTTP-forgalom rögzítésére és vizsgálatára. Az olyan eszközök, mint a Dev Proxy, a Fiddler, a Proxyman, a Charles Proxy vagy a mitmproxy, helyi továbbítási proxyként működnek. Futtathatja rajtuk keresztül az alkalmazást a kérések és válaszok elemzéséhez, a hibák kiszúrásához, valamint a fejlécek vagy hitelesítési jogkivonatok ellenőrzéséhez.

API-átjáró és útválasztás

Számos termelési rendszerben az alkalmazás háttérrendszerére irányuló forgalom API-átjárón vagy fordított proxyn (például NGINX) vagy felhőalapú szolgáltatáson, mint az Azure API Management, keresztül van irányítva. Ezek a proxyk kezelik az útválasztást, a hitelesítést, a sebességkorlátozást és egyebeket.

Az API tervezésekor vagy az elosztott szolgáltatások létrehozásakor tisztában kell lennie azzal, hogy a proxyk hogyan befolyásolják a fejléceket (például X-Forwarded-Foraz időtúllépéseket és a kérelmek méretkorlátjait).

CORS és helyi fejlesztés

A helyi fejlesztés során, különösen a webalkalmazásokban, előfordulhat, hogy a böngészőből származó API-k meghívásakor a forrásközi erőforrás-megosztás (CORS) korlátozásai lépnek fel. A fejlesztési proxy továbbíthatja a kéréseket a cél API-nak, miközben átírja a fejléceket a CORS-korlátozások megkerülése érdekében. A CORS-kérelmeket átíró fejlesztői eszközök gyakori példái a vite, webpack-dev-servervagy egyéni proxyközvetítmények az Express vagy a ASP.NET Core keretrendszerekben.

Szolgáltatásvirtualizálás és tesztelés

A proxyk képesek szimulálni a háttér API-kat. Ez a funkció akkor hasznos, ha a valós szolgáltatás nem érhető el, instabil vagy költséges a tesztelés során. A válaszok elfogásával és kipockázásával tesztelheti az alkalmazás viselkedését különböző helyzetekben, például időtúllépések, hibák vagy helytelenül formázott adatok esetén.

Az integrációs és a végpontok közötti tesztek során gyakran használják erre a célra az olyan eszközöket, mint a Dev Proxy vagy az egyéni proxy implementációk.

Hitelesítés és biztonság

A proxyk gyakran az alkalmazások védelmének frontvonalát képezik. Kényszeríthetik a hozzáférés-vezérlést, beszúrhatják a hitelesítési fejléceket, vagy megszakíthatják a TLS-/SSL-kapcsolatokat. Fejlesztőként fontos tisztában lenni azzal, hogy az alkalmazás hogyan viselkedik, amikor proxy mögött ül, és hogyan férhet hozzá a hitelesítési vagy identitásadatokat tartalmazó fejlécekhez.

A gyakori szempontok a fejlécekkel és a proxykkal kapcsolatban

Amikor egy kérelem áthalad egy proxyn, a rendszer hozzáad vagy módosít bizonyos fejléceket a fontos metaadatok megőrzése érdekében. Például:

  • X-Forwarded-For: Az ügyfél eredeti IP-címét jelzi.
  • X-Forwarded-Proto: Az eredeti protokollt (HTTP vagy HTTPS) jelzi.
  • X-Forwarded-Host: Az ügyfél által megadott eredeti kiszolgálót jelzi.

Ha az alkalmazás fordított proxy mögött fut, győződjön meg arról, hogy a keretrendszer vagy a platform úgy van konfigurálva, hogy megbízható legyen, és megfelelően értelmezze ezeket a fejléceket.

Proxy használata annak teszteléséhez, hogy az alkalmazás hogyan kezeli az API-hibákat

Mivel a továbbítási proxy minden olyan kérést lát, amelyet az alkalmazás küld, néhányat hibával is megválaszolhat a továbbítás helyett: egy 500, egy 429 Too Many Requests, Retry-After fejléccel, vagy egy 8 másodpercig tartó választ. Az alkalmazás továbbra is meghívja a valódi API-URL-címeket, így éles környezetben futtatva tesztelheti az alkalmazást, beleértve a HTTP-ügyfelet, az SDK-t és az újrapróbálkozási házirendet.

Az API-hibák tesztelésének egyéb módjaival összehasonlítva:

Approach Mit talál? Ami hiányzik
Várjon az éles üzemre Tényleges meghibásodások Minden addig, amíg egy felhasználó rá nem kattint
Mockold az API-t a tesztjeidben, vagy hagyd, hogy a kódoló ügynök megírja a mockot Hogy a hibaágak lefutnak-e Az API valós állapotkódjai, fejlécei és hibatörzsei, valamint az SDK újrapróbálkozési szabályzata. Az alkalmazásnak egy csak tesztelési kapcsolóra is szüksége van a mock eléréséhez.
Hívja meg a valódi API-t, és remélje, hogy nem sikerül Valós viselkedés Nem lehet igény szerint hibát előidézni
Futtassa az alkalmazást egy hibákat szimuláló proxyn keresztül Hibák, sebességkorlátozás és késés a valós URL-címeken igény szerint A kódod elkülönítve van. Arra valók az egységtesztek.

Fejlesztői proxy továbbítási proxyként fejlesztéshez és teszteléshez

Dev Proxy egy olyan forward proxy, amelyet a számítógépén vagy a CI-ben futtat az alkalmazásból érkező, az Ön által választott API-k felé irányuló kérések elfogásához és módosításához. A Dev Proxyval a következőt teheti:

  • Megtudhatja, hogyan reagál az alkalmazás az API-hibákra.
  • Ellenőrizze, hogy az alkalmazás hogyan kezeli az API-sebességkorlátokat és a korlátozást.
  • Megtudhatja, hogyan kezeli az alkalmazás a lassú API-kat.
  • Mock API-k létrehozása kódsor írása nélkül.
  • Kontextusfüggő útmutatást kaphat az API-k használatáról.

Ha azon az API-n szeretné kipróbálni, amelyet az alkalmazása hív, töltsön le egy előre beállított fájlt, és indítsa el vele a Dev Proxyt. Például a GitHub esetében:

devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"

Az OpenAI (openai-throttling), Anthropic (anthropic-throttling) és Microsoft Graph OneDrive és SharePoint végpontok (microsoft-graph-rate-limiting) esetében is elérhetők előre beállított beállítások.

Próbálja ki!

Válasszon egy olyan forgatókönyvet, amely megfelel az éppen létrehozott forgatókönyvnek:

Következő lépés