Wat is een proxy?

Een proxy is een tussenliggende server die zich tussen een client (zoals uw toepassing) en een bestemmingsserver (zoals een back-end-API) bevindt. Wanneer uw toepassing een aanvraag verzendt, ontvangt de proxy deze eerst. De proxy kan het verzoek vervolgens doorsturen naar de doelserver, het wijzigen, blokkeren of rechtstreeks een antwoord terugsturen.

Kortom, een proxy handelt namens de client of de server om communicatie te bemiddelen.

Hoe een proxy werkt

Proxy's werken op HTTP-niveau (of andere toepassingsprotocollen) door binnenkomende aanvragen te ontvangen en een of meer van de volgende acties uit te voeren:

  • Het verzoek doorsturen naar de doelserver en het antwoord vervolgens terugsturen naar de client.
  • het wijzigen van headers, URL's of payloads voordat ze worden doorgestuurd.
  • onderscheppen en lokaal reageren op de aanvraag zonder contact op te maken met de doelserver.
  • Het weigeren van de aanvraag op basis van regels of toegangsbeleid.

Vanuit het perspectief van de client verzendt deze gewoon een aanvraag naar een URL. De proxy verwerkt alles achter de schermen. Het patroon is client naar proxy naar doelserver.

Dit patroon introduceert een laag van controle en abstractie die u kunt gebruiken om de beveiliging, waarneembaarheid, prestaties en testbaarheid te verbeteren.

Typen proxies

Er zijn verschillende soorten proxy's. Elk is geschikt voor specifieke rollen in de systeemarchitectuur.

doorstuurproxy

Een forward proxy bevindt zich vóór de client. Wanneer uw toepassing een aanvraag indient, gaat deze via de proxy, waarmee wordt bepaald of en hoe deze moet worden doorgestuurd. Forward-proxy's worden doorgaans gebruikt om

  • Toegang tot externe resources beheren.
  • Clientverkeer anoniem maken.
  • Registreer het uitgaande verkeer voor het monitoren.
  • Pas inhoudsfiltering of transformatie toe.

Omgekeerde proxy

Een omgekeerde proxy bevindt zich vóór de server. Klanten zijn niet op de hoogte van de onderliggende back-end infrastructuur. De reverse proxy ontvangt binnenkomende verzoeken en stuurt deze door naar een van de verschillende back-endservers. Omgekeerde proxy's worden vaak gebruikt voor:

  • Verkeer gelijkmatig verdelen over meerdere diensten.
  • Serveer antwoorden in de cache om de belasting van de back-end te verminderen.
  • Beëindig TLS/SSL-verbindingen.
  • Interne servicegegevens van het openbare internet verbergen.

Transparante proxy

Een transparante proxy onderschept verkeer zonder dat de client expliciet is geconfigureerd om deze te gebruiken. Dit type wordt gebruikt in bedrijfs- of internetprovideromgevingen om beleid af te dwingen of het gebruik te controleren.

Waarom proxy's belangrijk zijn voor toepassingsontwikkelaars

Infrastructuur- of netwerkteams beheren vaak proxy's. Proxy's hebben echter een directe invloed op het gedrag van applicaties, vooral in ontwikkel- en testomgevingen. Hier zijn enkele praktische manieren waarop ze uw dagelijkse werk beïnvloeden.

Foutopsporing en waarneembaarheid

Proxy's kunnen HTTP-verkeer vastleggen en inspecteren. Hulpprogramma's zoals Dev Proxy, Fiddler, Proxyman, Charles Proxy of mitmproxy fungeren als lokale doorstuurproxy's. U kunt uw toepassing uitvoeren om aanvragen en antwoorden te analyseren, fouten te herkennen en headers of verificatietokens te verifiëren.

API-gateway en routering

In veel productiesystemen wordt het verkeer naar de back-end van uw toepassing gerouteerd via een API-gateway of reverse proxy, zoals NGINX, of een cloudeigen service zoals Azure API Management. Deze proxy's verwerken routering, verificatie, frequentiebeperking en meer.

Wanneer u uw API ontwerpt of gedistribueerde services bouwt, moet u begrijpen hoe proxy's van invloed zijn op headers (zoals X-Forwarded-For), time-outs en aanvraaggroottelimieten.

CORS en lokale ontwikkeling

Tijdens lokale ontwikkeling, met name in webtoepassingen, kunt u CORS-beperkingen (Cross-origin Resource Sharing) tegenkomen wanneer u API's aanroept vanuit de browser. Een ontwikkelingsproxy kan uw aanvragen doorsturen naar de doel-API terwijl deze headers herschrijft om CORS-beperkingen te omzeilen. Veelvoorkomende voorbeelden van ontwikkelhulpprogramma's die CORS-aanvragen herschrijven, zijn vite, webpack-dev-serverof aangepaste proxy-middleware in frameworks zoals Express of ASP.NET Core.

Servicevirtualisatie en testen

Proxy's kunnen back-end-API's simuleren. Deze mogelijkheid is handig wanneer de echte service niet beschikbaar, onstabiel of duur is om te gebruiken tijdens het testen. Door reacties te onderscheppen en te mocken, kunt u het gedrag van toepassingen testen onder verschillende scenario's, zoals time-outs, fouten of onjuiste gegevens.

Tools zoals Dev Proxy of aangepaste proxy-implementaties worden vaak voor dit doel gebruikt bij integratie en end-to-end tests.

Verificatie en beveiliging

Proxy's zijn vaak de frontlinie van verdediging bij het beveiligen van toepassingen. Ze kunnen toegangscontroles afdwingen, authenticatieheaders injecteren of TLS/SSL-verbindingen beëindigen. Als ontwikkelaar is het belangrijk om te weten hoe uw toepassing zich gedraagt wanneer deze zich achter een proxy bevindt en hoe u toegang krijgt tot headers die verificatie- of identiteitsgegevens bevatten.

Algemene overwegingen voor headers en proxy's

Wanneer een aanvraag via een proxy wordt doorgegeven, worden bepaalde headers toegevoegd of gewijzigd om belangrijke metagegevens te behouden. Bijvoorbeeld:

  • X-Forwarded-For: geeft het oorspronkelijke IP-adres van de client aan.
  • X-Forwarded-Proto: Geeft het oorspronkelijke protocol (HTTP of HTTPS) aan.
  • X-Forwarded-Host: Geeft de oorspronkelijke host aan die door de client is aangevraagd.

Wanneer uw toepassing achter een reverse proxy wordt uitgevoerd, moet u ervoor zorgen dat uw framework of platform is geconfigureerd om deze headers te vertrouwen en correct te interpreteren.

Een proxy gebruiken om te testen hoe uw app API-fouten verwerkt

Omdat een doorstuurproxy elke aanvraag ziet die uw app verzendt, kan deze ook enkele aanvragen beantwoorden met een fout in plaats van ze door te sturen: een 500, een 429 Too Many Requests met een Retry-After-header of een antwoord dat 8 seconden duurt. Uw app roept de echte API-URL's aan, dus test u de app terwijl deze wordt uitgevoerd in productie, inclusief de HTTP-client, SDK en het beleid voor opnieuw proberen.

Vergeleken met andere manieren om API-fouten te testen:

Approach Wat u vindt Wat u mist
Wachten op productie Werkelijke storingen Alles, totdat een gebruiker erop klikt
Mock de API in je tests, of laat je codeeragent de mock schrijven Of uw foutvertakkingen worden uitgevoerd De werkelijke statuscodes, headers en foutteksten van de API en het retrybeleid van uw SDK. Uw app heeft ook een testswitch nodig om de mock te bereiken.
De echte API aanroepen en hopen dat deze mislukt Werkelijk gedrag U kunt niet op verzoek een storing uitlokken
Uw app uitvoeren via een proxy waarmee fouten worden gesimuleerd Fouten, throttling en latentie op de werkelijke URL's, op aanvraag Uw code op zichzelf. Bewaar uw unit-tests daarvoor.

Dev Proxy als doorstuurproxy voor ontwikkeling en testen

Dev Proxy is een doorstuurproxy die u uitvoert op uw computer of in CI om aanvragen van uw toepassing te onderscheppen en te wijzigen naar de API's die u kiest. Met Dev Proxy kunt u het volgende doen:

  • Bekijk hoe uw app reageert op API-fouten.
  • Controleer hoe uw app API-frequentielimieten en throttling verwerkt.
  • Bekijk hoe uw app trage API's verwerkt.
  • Zet mock-API's op zonder een regel code te schrijven.
  • Krijg contextuele richtlijnen voor het gebruik van API's.

Als u het wilt proberen op de API die uw app aanroept, downloadt u een voorinstelling en start u de Dev Proxy ermee. Bijvoorbeeld voor GitHub:

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

Voorinstellingen zijn ook beschikbaar voor OpenAI (openai-throttling), Anthropic (anthropic-throttling) en Microsoft Graph OneDrive en SharePoint eindpunten (microsoft-graph-rate-limiting).

Probeer het zelf

Kies een scenario dat overeenkomt met wat u bouwt:

Volgende stap