O que é um proxy?

Um proxy é um servidor intermediário que fica entre um cliente (como seu aplicativo) e um servidor de destino (como uma API de back-end). Quando seu aplicativo envia uma solicitação, o proxy a recebe primeiro. Em seguida, o proxy pode encaminhar a solicitação para o servidor de destino, modificá-la, bloqueá-la ou retornar uma resposta diretamente.

Em suma, um proxy atua em nome do cliente ou do servidor para mediar a comunicação.

Como um proxy funciona

Os proxies operam no nível HTTP (ou em outros protocolos de aplicativo) recebendo solicitações de entrada e executando uma ou mais das seguintes ações:

  • Encaminhando a solicitação para o servidor de destino e, em seguida, retransmitindo a resposta de volta para o cliente.
  • Modificar cabeçalhos, URLs ou payloads antes do encaminhamento.
  • Interceptando e respondendo à solicitação localmente sem entrar em contato com o servidor de destino.
  • Rejeitando a solicitação com base em regras ou políticas de acesso.

Do ponto de vista do cliente, ele está simplesmente enviando uma solicitação para uma URL. O proxy gerencia todo o resto nos bastidores. O padrão é do cliente para o proxy e para o servidor de destino.

Esse padrão introduz uma camada de controle e abstração que você pode usar para melhorar a segurança, a observabilidade, o desempenho e a capacidade de teste.

Tipos de proxies

Há diferentes tipos de proxies. Cada uma delas é adequada para funções específicas na arquitetura do sistema.

Proxy de encaminhamento

Um proxy avançado fica na frente do cliente . Quando seu aplicativo faz uma solicitação, ele passa pelo proxy, que decide se e como encaminhá-lo. Os proxies de encaminhamento geralmente são usados para:

  • Controlar o acesso a recursos externos.
  • Anonimizar o tráfego do cliente.
  • Registre o tráfego de saída para monitoramento.
  • Aplicar filtragem ou transformação de conteúdo.

Proxy reverso HTTP

Um proxy reverso fica na frente do servidor. Os clientes não estão cientes da infraestrutura de back-end subjacente. O proxy reverso recebe solicitações de entrada e as encaminha para um dos vários servidores de back-end. Os proxies reversos HTTP são comumente usados para:

  • Balancear a carga de tráfego entre vários serviços.
  • Sirva respostas armazenadas em cache para reduzir a carga de back-end.
  • Encerrar conexões TLS/SSL.
  • Ocultar detalhes do serviço interno da Internet pública.

Proxy transparente

Um proxy transparente intercepta o tráfego sem que o cliente seja configurado explicitamente para usá-lo. Esse tipo é usado em ambientes corporativos ou de provedor de serviços de Internet para impor políticas ou monitorar o uso.

Por que os proxies importam para desenvolvedores de aplicativos

Geralmente, as equipes de infraestrutura ou de rede gerenciam proxies. No entanto, os proxies afetam diretamente o comportamento do aplicativo, especialmente em ambientes de desenvolvimento e teste. Aqui estão algumas maneiras práticas de afetar seu trabalho diário.

Depuração e observabilidade

Os proxies podem capturar e inspecionar o tráfego HTTP. Ferramentas como Dev Proxy, Fiddler, Proxyman, Charles Proxy ou mitmproxy atuam como proxies de encaminhamento local. Você pode executar seu aplicativo por meio deles para analisar solicitações e respostas, detectar erros e verificar cabeçalhos ou tokens de autenticação.

Gateway de API e roteamento

Em muitos sistemas de produção, o tráfego para o back-end do aplicativo é roteado por meio de um gateway de API ou proxy reverso, como NGINX, ou um serviço nativo de nuvem, como o Gerenciamento de API do Azure. Esses proxies lidam com roteamento, autenticação, limitação de taxa e muito mais.

Ao projetar sua API ou criar serviços distribuídos, você deve entender como os proxies afetam cabeçalhos (como X-Forwarded-For), tempos limite e limites de tamanho da solicitação.

CORS e desenvolvimento local

Durante o desenvolvimento local, especialmente em aplicativos Web, você pode encontrar restrições de CORS (compartilhamento de recursos entre origens) ao chamar APIs do navegador. Um proxy de desenvolvimento pode encaminhar suas solicitações para a API de destino enquanto ele reescreve cabeçalhos para ignorar as limitações do CORS. Exemplos comuns de ferramentas de desenvolvedor que reescrevem solicitações CORS são vite, webpack-dev-serverou middleware proxy personalizado em estruturas como Express ou ASP.NET Core.

Virtualização e teste de serviço

Proxies podem simular APIs de back-end. Essa funcionalidade é útil quando o serviço real está indisponível, instável ou caro para ser usado durante o teste. Ao interceptar e simular respostas, você pode testar o comportamento do aplicativo em diferentes cenários, como tempos limite, erros ou dados malformados.

Ferramentas como Dev Proxy ou implementações de proxy personalizadas são comumente usadas para essa finalidade em testes de integração e ponta a ponta.

Autenticação e segurança

Proxies geralmente são a linha de frente da defesa na proteção de aplicativos. Eles podem impor controles de acesso, injetar cabeçalhos de autenticação ou encerrar conexões TLS/SSL. Como desenvolvedor, é importante estar ciente de como seu aplicativo se comporta quando ele fica atrás de um proxy e como acessar cabeçalhos que carregam informações de autenticação ou identidade.

Considerações comuns sobre cabeçalhos e proxy

Quando uma solicitação passa por um proxy, determinados cabeçalhos são adicionados ou modificados para preservar metadados importantes. Por exemplo:

  • X-Forwarded-For: indica o endereço IP original do cliente.
  • X-Forwarded-Proto: indica o protocolo original (HTTP ou HTTPS).
  • X-Forwarded-Host: indica o host original solicitado pelo cliente.

Quando seu aplicativo é executado atrás de um proxy reverso, verifique se sua estrutura ou plataforma está configurada para confiar e interpretar esses cabeçalhos corretamente.

Usar um proxy para testar como seu aplicativo lida com falhas de API

Como um proxy de encaminhamento vê todas as solicitações enviadas pelo aplicativo, ele também pode responder a algumas delas com uma falha em vez de encaminhá-las: um 500, um 429 Too Many Requests com um cabeçalho Retry-After ou uma resposta que leva 8 segundos. Seu aplicativo continua chamando as URLs de API reais, para que você teste o aplicativo conforme ele é executado em produção, incluindo seu cliente HTTP, SDK e política de repetição.

Comparado com outras maneiras de testar falhas de API:

Approach O que você encontra Do que você sente falta
Aguardar implantação Falhas reais Tudo, até que um usuário clique nele
Fazer mock da API em seus testes ou deixar seu agente de codificação escrever o mock Se suas ramificações de erro são executadas Os códigos de status, cabeçalhos e corpos de erro reais da API e a política de repetição do seu SDK. Seu aplicativo também precisa de uma opção somente de teste para acessar o mock.
Chame a API real e espere que ela falhe Comportamento real Você não pode provocar uma falha sob demanda
Execute seu aplicativo por meio de um proxy que simula falhas Erros, limitação e latência nas URLs reais, sob demanda Seu código de forma isolada. Guarde isso para seus testes de unidade.

Dev Proxy como proxy de encaminhamento para desenvolvimento e teste

O Proxy de Desenvolvimento é um proxy de encaminhamento que você executa no computador ou na CI para interceptar e modificar solicitações do aplicativo para as APIs escolhidas. Com o Proxy de Desenvolvimento, você pode:

  • Veja como seu aplicativo responde a erros de API.
  • Verifique como seu aplicativo lida com limites de taxa de API e limitação.
  • Veja como seu aplicativo lida com APIs lentas.
  • Crie as APIs simuladas sem escrever uma linha de código.
  • Obtenha diretrizes contextuais sobre como usar APIs.

Para experimentá-lo na API que seu aplicativo chama, baixe uma predefinição e inicie o Proxy de Desenvolvimento com ela. Por exemplo, para GitHub:

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

Predefinições também estão disponíveis para pontos de extremidade openai (openai-throttling), Anthropic (anthropic-throttling) e Microsoft Graph OneDrive e SharePoint (microsoft-graph-rate-limiting).

Tente você mesmo

Escolha um cenário que corresponda ao que você está criando:

Próxima etapa