
Portanto, eu sei sobre proxies básicos e como eles encaminham a conexão de forma transparente para o destino. Eu simplesmente não conseguia entender como funciona o encadeamento de proxies.
Por exemplo eu tenho essa cadeia: proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination
.
Como em proxies únicos normais, nossa solicitação é enviada ao proxy, que a encaminha ao destino e envia a resposta de volta. Mas no encadeamento de proxy, como saber proxy1
que é necessário encaminhar a solicitação para proxy2
e assim por diante, em vez de encaminhá-la diretamente para o destino?
É por causa de algum tipo de cabeçalho nas solicitações que enviamos para a cadeia de proxy, que informa adequadamente aos proxies para encaminhar as solicitações para o próximo proxy?
Responder1
Eu acho que é sobreo método HTTP "CONNECT".
Neste mecanismo, o cliente solicita a um servidor proxy HTTP que encaminhe a conexão TCP para o destino desejado. O servidor então prossegue para fazer a conexão em nome do cliente. Depois que a conexão for estabelecida pelo servidor, o servidor proxy continuará a fazer proxy do fluxo TCP de e para o cliente. Observe que apenas a solicitação de conexão inicial é HTTP - depois disso, o servidor simplesmente faz proxy da conexão TCP estabelecida.
A última frase é a chave.Você pede proxy1
para fazer proxy da conexão para proxy2
. Aí tudo que vem a seguir vai para proxy2
o proxy1
qual não interpreta mais, então você pede para proxy proxy3
e essa requisição é capturada e interpretada por proxy2
. A próxima solicitação CONNECT (para proxy para proxy4
) passará por proxy1
e proxy2
, será interpretada por proxy3
– e assim por diante. Cada proxy na cadeia interpretaexatamente umsolicitação CONNECT, então ela se tornará transparente.
Depois que todos os proxies estiverem configurados corretamente pela sequência de pacotes iniciais, qualquer coisa que utilize uma conexão TCP bidirecional poderá ser passada através do túnel CONNECT.
Cuidado com isso
Nem todos os servidores proxy HTTP suportam esse recurso e mesmo aqueles que oferecem podem limitar o comportamento.
Nota final: durante a experiência, você poderá ter problemas para encadear proxies se o programa executado usar GET em vez de CONNECT. GET não permite encadeamento, isso é cobertoaqui. Sua confusão sobre o encadeamento de proxy pode ser porque você está mais familiarizado (ou seja, pensa em termos) do mecanismo GET.