11

Если я хочу подключиться, чтобы сказать, IP 100.100.100.100, порт 80, мой компьютер отправит пакет tcp с этим адресом в провод.

Теперь, если я использую прокси-сервер, скажем, 200.200.200.200 Порт 8080 (такой тип прокси, который вы можете настроить в Internet Explorer), как этот процесс изменяется?

Когда я все еще хочу подключиться к тому же IP-адресу, будет ли в заголовке IP-адреса указан IP-адрес назначения или IP-адрес прокси-сервера или оба этих параметра?

Я уже погуглил, есть сотни страниц, которые рассказывают, как настроить прокси, но ни одна не объясняет, как это работает под капотом.

4 ответа4

12

HTTP-запрос отправляется с клиента на порт 8080 прокси-сервера. Затем прокси-сервер отправляет новый HTTP-запрос на конечный сайт. Прокси-сервер, в зависимости от конфигурации, часто добавляет заголовок «X-Forwarded-For» к HTTP-запросу. В файлах журнала на целевом веб-сайте будет отображаться IP-адрес прокси-сервера, но он может или не может быть настроен на запись адреса «X-Forwarded-For».

Это типичная конфигурация, но прокси-программное обеспечение позволит вам все виды настройки.

РЕДАКТИРОВАТЬ: я должен отметить, что когда я первоначально прочитал ваш вопрос, я понял, что вы спрашивали об HTTP-прокси, в частности, например, Squid или Nginx. Есть много различных типов доступных прокси. В Internet Explorer вы, скорее всего, будете использовать HTTP-прокси, но есть и много других типов.

2

HTTP - протокол уровня 7, так что не запутайтесь. когда вы используете прокси-сервер HTTP и вводите google.com, заголовок HTTP остается тем же google.com, но конечным IP-адресом будет IP-адрес прокси-сервера, источником будет IP-адрес хоста для настроенного порта 8080.

0

Чтобы использовать 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

Сторона ответа, если операция может быть более простой, поскольку прокси-сервер может просто передавать дословный ответ через предварительно установленный сокет запроса.

-7

Там нет такого понятия, как "пакет TCP". TCP работает с потоками данных. Есть IP-пакеты.

Кажется, вам не хватает базовых знаний о работе с сетями, я предлагаю вам получить хорошую книгу о TCP/IP. Всеми любимым кажется «проиллюстрированный TCP/IP» У. Ричарда Стивенса.

Вернемся к вашему вопросу.

Прокси-посредник:

[вы] - [прокси] - [сервер, к которому вы хотите подключиться]

Теперь есть два разных соединения:

[вы] - (ваше соединение с прокси) - [прокси] - (соединение прокси с сервером) - [сервер, к которому вы хотите подключиться]

Когда вы думаете, что подключаетесь к серверу через прокси-сервер, вы фактически подключаетесь к прокси-серверу и говорите, что хотите подключиться к определенному серверу. Затем прокси-сервер открывает второе соединение от себя с этим сервером и действует как посредник, передавая данные в обоих направлениях.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .