
Итак, я знаю о базовых прокси и о том, как они прозрачно пересылают соединение к месту назначения. Я просто не мог понять, как работают цепочки прокси.
Например, у меня есть такая цепочка: proxy1 -> proxy2 -> proxy3 -> proxy4 -> destination
.
Как и в обычных одиночных прокси, наш запрос отправляется на прокси, который затем пересылает его в пункт назначения и отправляет ответ обратно. Но в цепочке прокси, как узнать, proxy1
что он должен переслать запрос в proxy2
, и так далее, вместо того, чтобы переслать его напрямую в пункт назначения?
Может быть, это связано с какими-то заголовками в запросах, которые мы отправляем в proxy-chain, которые соответствующим образом сообщают прокси-серверам о необходимости пересылать запросы следующему прокси-серверу?
решение1
Я думаю, это оHTTP-метод «CONNECT».
В этом механизме клиент просит HTTP-прокси-сервер переслать TCP-соединение в желаемое место назначения. Затем сервер приступает к созданию соединения от имени клиента. После того, как соединение установлено сервером, прокси-сервер продолжает проксировать TCP-поток к клиенту и от него. Обратите внимание, что только начальный запрос на соединение является HTTP — после этого сервер просто проксирует установленное TCP-соединение.
Последнее предложение является ключевым.Вы запрашиваете proxy1
проксирование соединения с proxy2
. Затем все, что следует, идет proxy2
через proxy1
, который больше не интерпретирует, поэтому вы запрашиваете проксирование proxy3
и этот запрос перехватывается и интерпретируется proxy2
. Следующий запрос CONNECT (проксирование proxy4
) пройдет через proxy1
и proxy2
, он будет интерпретирован proxy3
– и так далее. Каждый прокси в цепочке интерпретируетровно одинЗапрос CONNECT, после чего он становится прозрачным.
После того, как все прокси-серверы будут правильно настроены с помощью последовательности начальных пакетов, все, что использует двустороннее TCP-соединение, может быть передано через туннель CONNECT.
Остерегайтесь этого
Не все HTTP-прокси-серверы поддерживают эту функцию, и даже те, которые ее поддерживают, могут ограничивать ее возможности.
Последнее замечание: во время экспериментов у вас могут возникнуть проблемы с цепочкой прокси, если программа, которую вы запускаете, использует GET вместо CONNECT. GET не допускает цепочку, это покрываетсяздесьВаша путаница относительно цепочки прокси может быть вызвана тем, что вы более знакомы с механизмом GET (т. е. мыслите его терминами).