Как именно работает прокси?
Если я хочу подключиться, чтобы сказать, IP 100.100.100.100, порт 80, мой компьютер отправит пакет tcp с этим адресом в провод.
Теперь, если я использую прокси-сервер, скажем, 200.200.200.200 Порт 8080 (такой тип прокси, который вы можете настроить в Internet Explorer), как этот процесс изменяется?
Если я все еще хочу подключиться к тому же IP-адресу, будет ли в заголовке IP-адреса указан IP-адрес назначения или IP-адрес прокси-сервера или оба этих параметра?
Я уже погуглил, есть сотни страниц, которые рассказывают, как настроить прокси, но ни одна не объясняет, как это работает под капотом.
4 ответа
HTTP-запрос отправляется с клиента на порт 8080 прокси-сервера. Затем прокси-сервер отправляет новый HTTP-запрос на конечный сайт. Прокси-сервер, в зависимости от конфигурации, часто добавляет заголовок "X-Forwarded-For" к HTTP-запросу. В файлах журнала на целевом веб-сайте будет отображаться IP-адрес прокси-сервера, но он может или не может быть настроен для регистрации адреса "X-Forwarded-For".
Это типичная конфигурация, но прокси-программное обеспечение позволит вам все виды настройки.
РЕДАКТИРОВАТЬ: я должен отметить, что когда я первоначально прочитал ваш вопрос, я понял, что вы спрашивали об HTTP-прокси, в частности, например, Squid или Nginx. Есть много различных типов доступных прокси. В Internet Explorer вы, скорее всего, будете использовать HTTP-прокси, но есть и много других типов.
HTTP - протокол уровня 7, так что не запутайтесь. когда вы используете прокси-сервер HTTP и вводите google.com, заголовок HTTP остается тем же google.com, но конечным IP-адресом будет IP-адрес прокси-сервера, а источником будет IP-адрес хоста для настроенного номера порта 8080.
Чтобы использовать HTTP-прокси, запрос отправляется от клиента на IP-адрес прокси-сервера, а не на конечный сервер. Затем прокси должен прочитать HTTP-заголовок, чтобы извлечь запрос-URI. URI запроса включает в себя имя или IP-адрес конечного сервера, и прокси-сервер использует эту информацию для пересылки запроса.
Спецификация HTTP позволяет строке запроса исключать имя и порт сервера, когда прокси-сервер не используется (так как в этом нет необходимости, если запрос был отправлен непосредственно на этот сервер). Но согласно спецификации...
Форма absoluteURI ТРЕБУЕТСЯ, когда выполняется запрос к прокси.
Поэтому, когда прокси не используется, строка запроса может выглядеть следующим образом:
GET /robots.txt HTTP/1.1
но чтобы использовать прокси, строка должна содержать имя сервера (и порт, если не 80):
GET http://httpbin.org:80/robots.txt HTTP/1.1
Сторона ответа, если операция может быть более простой, поскольку прокси-сервер может просто ретранслировать дословный ответ через предварительно установленный сокет запроса.
Там нет такого понятия, как "пакет TCP". TCP работает с потоками данных. Есть IP-пакеты.
Кажется, вам не хватает базовых знаний о работе с сетями, я предлагаю вам получить хорошую книгу о TCP/IP. Всеми любимым кажется "проиллюстрированный TCP / IP" У. Ричарда Стивенса.
Вернемся к вашему вопросу.
Прокси посредник:
[вы] - [прокси] - [сервер, к которому вы хотите подключиться]
Теперь есть два разных соединения:
[вы] - (ваше соединение с прокси) - [прокси] - (соединение прокси с сервером) - [сервер, к которому вы хотите подключиться]
Когда вы думаете, что подключаетесь к серверу через прокси-сервер, вы фактически подключаетесь к прокси-серверу и говорите, что хотите подключиться к определенному серверу. Затем прокси-сервер открывает второе соединение от себя с этим сервером и действует как посредник, передавая данные в обоих направлениях.