Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un proxy è un server intermedio che si trova tra un client (ad esempio l'applicazione) e un server di destinazione (ad esempio un'API back-end). Quando l'applicazione invia una richiesta, il proxy lo riceve per primo. Il proxy può quindi inoltrare la richiesta al server di destinazione, modificarla, bloccarla o restituire direttamente una risposta.
In breve, un proxy agisce per conto del client o del server per mediare la comunicazione.
Funzionamento di un proxy
I proxy operano a livello HTTP (o altri protocolli dell'applicazione) ricevendo richieste in ingresso e eseguendo una o più delle azioni seguenti:
- Inoltro della richiesta al server di destinazione e quindi inoltro della risposta al client.
- Modificare intestazioni, URL o payload prima dell'inoltro.
- Intercettazione e risposta alla richiesta in locale senza contattare il server di destinazione.
- Rifiuto della richiesta in base a regole o criteri di accesso.
Dal punto di vista del client, si tratta semplicemente di inviare una richiesta a un URL. Il proxy gestisce tutto il resto dietro le quinte. Il modello è dal client, al proxy, al server di destinazione.
Questo modello introduce un livello di controllo e astrazione che è possibile usare per migliorare la sicurezza, l'osservabilità, le prestazioni e la testabilità.
Tipi di proxy
Esistono diversi tipi di proxy. Ognuno di essi è adatto a ruoli specifici nell'architettura di sistema.
Proxy di inoltro
Un proxy di inoltro si trova davanti al client . Quando l'applicazione effettua una richiesta, passa attraverso il proxy, che decide se e come inoltrarlo. I proxy di inoltro vengono comunemente usati per:
- Controllare l'accesso alle risorse esterne.
- Rendere anonimo il traffico client.
- Registrare il traffico in uscita per il monitoraggio.
- Applicare il filtro o la trasformazione del contenuto.
Proxy inverso
Un proxy inverso si trova davanti al server . I client non sono a conoscenza dell'infrastruttura back-end sottostante. Il proxy inverso riceve le richieste in ingresso e le inoltra a uno dei diversi server back-end. I proxy inversi vengono comunemente usati per:
- Bilanciare il carico del traffico tra più servizi.
- Gestire le risposte memorizzate nella cache per ridurre il carico back-end.
- Terminare le connessioni TLS/SSL.
- Nascondere i dettagli del servizio interno dalla rete Internet pubblica.
Proxy trasparente
Un proxy trasparente intercetta il traffico senza che il client sia configurato in modo esplicito per usarlo. Questo tipo viene usato negli ambienti del provider di servizi Aziendali o Internet per applicare criteri o monitorare l'utilizzo.
Perché i proxy sono importanti per gli sviluppatori di applicazioni
Spesso i team di infrastruttura o di rete gestiscono proxy. Tuttavia, i proxy influiscono direttamente sul comportamento dell'applicazione, in particolare negli ambienti di sviluppo e test. Ecco alcuni modi pratici che influiscono sul lavoro quotidiano.
Debug e osservabilità
I proxy possono acquisire ed esaminare il traffico HTTP. Strumenti come Dev Proxy, Fiddler, Proxyman, Charles Proxy o mitmproxy fungono da proxy forward locali. È possibile eseguire l'applicazione tramite tali applicazioni per analizzare le richieste e le risposte, individuare gli errori e verificare le intestazioni o i token di autenticazione.
Gateway API e instradamento
In molti sistemi di produzione il traffico verso il back-end dell'applicazione viene instradato tramite un gateway API o un proxy inverso, ad esempio NGINX o un servizio nativo del cloud come Gestione API di Azure. Questi proxy gestiscono routing, autenticazione, limitazione della frequenza e altro ancora.
Quando si progetta l'API o si compilano servizi distribuiti, è necessario comprendere in che modo i proxy influiscono sulle intestazioni (ad esempio X-Forwarded-For), i timeout e i limiti delle dimensioni delle richieste.
CORS e sviluppo locale
Durante lo sviluppo locale, in particolare nelle applicazioni Web, è possibile che si verifichino restrizioni di condivisione delle risorse tra le origini (CORS) quando si chiamano LE API dal browser. Un proxy di sviluppo può inoltrare le richieste all'API di destinazione mentre riscrive le intestazioni per ignorare le limitazioni CORS. Esempi comuni di strumenti di sviluppo che riscrivono le richieste CORS sono vite, webpack-dev-servero middleware proxy personalizzato in framework come Express o ASP.NET Core.
Virtualizzazione e test dei servizi
I proxy possono simulare API back-end. Questa funzionalità è utile quando il servizio reale non è disponibile, instabile o costoso da usare durante i test. Intercettando e simulando risposte, è possibile testare il comportamento dell'applicazione in scenari diversi, ad esempio timeout, errori o dati in formato non valido.
Strumenti come Dev Proxy o implementazioni proxy personalizzate vengono comunemente usati per questo scopo nei test di integrazione e end-to-end.
Autenticazione e sicurezza
I proxy sono spesso la prima linea di difesa nella protezione delle applicazioni. Possono applicare controlli di accesso, inserire intestazioni di autenticazione o terminare connessioni TLS/SSL. In qualità di sviluppatore, è importante essere consapevoli del comportamento dell'applicazione quando si trova dietro un proxy e come accedere alle intestazioni che contengono informazioni sull'autenticazione o sull'identità.
Considerazioni comuni su intestazioni e proxy
Quando una richiesta passa attraverso un proxy, alcune intestazioni vengono aggiunte o modificate per conservare metadati importanti. Per esempio:
-
X-Forwarded-For: indica l'indirizzo IP originale del client. -
X-Forwarded-Proto: indica il protocollo originale (HTTP o HTTPS). -
X-Forwarded-Host: indica l'host originale richiesto dal client.
Quando l'applicazione viene eseguita dietro un proxy inverso, assicurati che il framework o la piattaforma siano configurati per considerare attendibili e interpretare correttamente queste intestazioni.
Dev Proxy come proxy di inoltro per lo sviluppo e il test
Dev Proxy è un proxy di inoltro che è possibile usare per intercettare e modificare le richieste dall'applicazione a qualsiasi server di destinazione. Con Dev Proxy è possibile:
- Scopri in che modo l'app risponde agli errori dell'API.
- Verificare il modo in cui l'app gestisce i limiti di frequenza delle API.
- Scopri come l'app gestisce le API lente.
- Configura rapidamente API simulate senza scrivere una riga di codice.
- Migliorare l'app con indicazioni contestuali su come usare le API.