Здесь представлена информация не просто о цепочках proxy серверов (о них уже сказано отдельно) и не об их построении вообще, а о так называемом "классическом" способе построения цепочек: что это такое, почему это не работает, и т.д.

Что такое "классический способ построения цепочки прокси"

Путешествуя по Internet в поисках информации о прокси серверах, Вы вероятно уже наталкивались на эти сведения. Если же нет, то сейчас Вам предстоит об этом узнать.

Классическим способом построения цепочки прокси многие считают следующий: нужно просто в поле адреса написать URL следующего вида:

http://proxy1:port1/http://proxy2:port2/http://www.server.ru/url/page.htm
или
http://proxy1:port1/-_-http://proxy2:port2/-_-http://www.server.ru/url/page.htm
или еще что-либо в этом роде

При этом каждый proxy сервер будет передавать запрос по цепочке следующему, тот - следующему, и т.д. до тех пор, пока запрос на документ не дойдет до конечного узла. Требуемый документ будет передан обратно по цепочке proxy.

На чем основан этот механизм, кто его придумал и почему

Объяснение тут довольно простое: все дело в самой технологии программирования через протокол HTTP. Действительно, когда начинаешь изучать прокси, кажется что это отдельный протокол, который очень сложным образом взаимодействует с серверами, и там все очень и очень сложно. На самом деле это не так. Рассмотрим механизм работы любого клиента (браузера), по скачиванию информации из интернет, скажем с сервера www.server.ru/homepage/index.htm как напрямую, так и с использованием proxy сервера proxy.ru:8080 :

Подключение напрямую:

  1. соединение с сервером (HTTP порт = 80):
    connect (www.server.ru, 80)
  2. запрос файла
    GET /homepage/index.htm HTTP/1.0
    Host: www.server.ru
    Accept: *.*, */*
  3. скачивание файла

Подключение через proxy сервер:

  1. соединение с proxy сервером (порт = 8080):
    connect (proxy.ru, 8080)
  2. запрос файла
    GET http://www.server.ru/homepage/index.htm HTTP/1.0
    Host: www.server.ru
    Accept: *.*, */*
  3. скачивание файла

Так вот, между этими запросами есть много общего. То есть по сути разница между ними кроется только в посылаемой команде GET: у обычного сервера запрашивается локальный файл (/homepage/index.htm), а у proxy сервера - полный URL (http://www.server.ru/homepage/index.htm)

Поэтому и возник вопрос: а почему бы не сделать так, чтобы вместо обычного пути к файлу (при прямом подключении) не подставлять полный URL? То есть указать в качестве "подкаталога" на сервере полный адрес:
http://proxy.ru:8080/http://www.server.ru/homepage/index.htm

Кто задал этот вопрос? Скорее всего, непрофессионал увидел как программист пишет код обращения к proxy серверу, и ему пришла в голову эта "гениальная по своей простоте" мысль.

Почему этот способ не работает

Рассмотрим подробно те причины, по которым эта мысль не может быть реализована на практике.

I "небольшая" тонкость работы

Дело в том, что есть небольшая проблема с тем, как обрабатывается обращение по адресу http://proxy.ru:8080/http://www.server.ru/homepage/index.htm

Рассмотрим конкретнее. Как это выглядит?

  1. соединение с сервером proxy.ru:8080
  2. посылаем запрос (!):
    GET /http://www.server.ru/homepage/index.htm
  3. скачиваем файл

Вы заметили разницу? В пункте "2" первый символ аргумента в команде GET - это слеш (/). Именно из-за этого слеша запрошенный адрес не может быть обработан правильно. И этот символ никак не обойти, не заменить на пробел (тогда это не будет считаться частью адреса) и не сцепить с предыдущими символами (тогда будет: proxy.ru:8080http...). Неважно, сколько символов нужно выбросить - 1 или 100 - это непреодолимое препятствие.

II не убедительно?

"Нет, я не верю, что все так просто объясняется!" - скажете Вы. Что же на это возразить? Да очень просто! Вы что думаете, разработчики браузеров об этом не подумали? Неужели Вы считаете, что если бы такой способ построения цепочки был возможен, та же компания Microsoft не кричала бы о нем как о "уникальной возможности браузера Internet Explorer сделать Вашу анонимность абсолютной"? Это же стандарт! Он долго выработывался, и мы уверены - Microsoft, Netscape и другие компании (создатели браузеров) тщательно обдумывали все варианты работы с proxy, и выбрали наиболее эффективный - для Вас! Не верите? Тогда...

III А вдруг это возможно...

Давайте представим себе на мгновение, что это стало возможным - эта уникальнейшая, наилегчайшая технология построения цепочки любого размера из прокси серверов. Давайте подумаем, как это будет выглядеть для нас?

Условие: мы исходим из реального положения дел. То есть учитываем тот факт, что технология работы прокси такова как сейчас, а если конкретно, она абсолютно прозрачна для приложений. Это означает, что любой файл (хоть архив, хоть картинка, хоть web-страница), скачиваемые с использованием proxy, будут абсолютно такими же, как если бы мы скачивали их напрямую с сервера.

Учитывая это условие, давайте рассмотрим нашу работу в Сети через цепочку... ну из 2-х прокси серверов. Итак...

  1. мы набираем адрес в строке браузера:
    http://proxy1.ru:8080/http://proxy2.ru/3128/http://www.yahoo.com/
  2. открывается заглавная страница сервера Yahoo!, содержащая каталог из массы разделов. Хотим идти в раздел "Entertaiment"
  3. Чтобы войти в этот раздел, нам нужно:
    • скопировать через буфер в блокнот строчку
      http://proxy1.ru:8080/http://proxy2.ru/3128/
    • скопировать в буфер ссылку на раздел Yahoo "Entertaiment" и добавить эту ссылку в блокнот таким образом, чтобы получилось что-то вроде:
      http://proxy1.ru:8080/http://proxy2.ru/3128/http://www.yahoo.com/Entertaiment/
    • вставить эту строчку в панель адреса браузера и открыть страничку по этому адресу.

А что Вы хотели? Технология прокси является прозрачной - это наше условие. То есть при открытии web-страницы через proxy (или цепочку proxy) все ссылки на странице указывают не на прокси, а прямо на web-сервер. То есть если мы хотим бродить по интернету через такую цепочку proxy, необходимо каждый раз (!) указывать браузеру полный адрес - поскольку ссылки не учитывают существование proxy (либо надо прописать прокси в настройках браузера - но это уже не "классический" способ построения цепочки прокси).

А я хочу, чтобы прокси менял эти ссылки...

Технология работы через прокси задумывалась и разрабатывалась как прозрачная. И Вы с этим ничего сделать не сможете. Обратите внимание: мы не утверждаем, что не работают вещи типа:

http://proxy1.ru:8080/http://proxy2.ru/3128/http://www.yahoo.com/

Причем с автоматической "подменой" ссылок, и т.п. Просто мы обращаем внимание: обычные (HTTP / HTTPS / SOCKS) прокси не позволяют Вам так работать!

А какие proxy сервера это позволяют? Ну так это же отдельная технология! Эти proxy называются CGI proxy или анонимайзеры. Читайте о них здесь.

назад в proxy FAQ


Мы знаем, что сейчас вы в

Woodbridge, United States
В интернете это может узнать любой!
Как защитить себя?
Мне все равно