Як саме працює проксі?


12

Якщо я хочу підключитися, скажімо, IP 100.100.100.100, порт 80, мій комп’ютер надішле в провід пакет tcp з цією адресою.

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

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

Я вже googled, є сотні сторінок, які розповідають, як налаштувати проксі, але жодна не пояснює, як це працює під кришкою.

Відповіді:


13

Запит HTTP надсилається від Клієнта до порту 8080 проксі-сервера. Потім проксі-сервер створює новий HTTP-запит на місце призначення. Проксі, залежно від конфігурації, часто додає заголовок "X-Forwarded-For" до HTTP-запиту. Файли журналів на веб-сайті призначення показуватимуть IP-адресу проксі-сервера, але можуть бути налаштовані для реєстрації адреси "X-Forwarded-For".

Це типова конфігурація, але проксі-програмне забезпечення дозволить вам виконати всі види налаштування.

EDIT: Я повинен зазначити, що коли я читав ваше запитання, я зрозумів, що ви запитуєте про HTTP-проксі, зокрема, про кальмар чи nginx. Існує багато різних типів проксі. В Internet Explorer ви, швидше за все, будете використовувати проксі-сервер HTTP, але також існує багато інших типів.


Так, це дуже залежить від програмного забезпечення, яке ви використовуєте в якості проксі-сервера та способу його налаштування. Дивіться, наприклад, HttpProxyModule для Nginx: wiki.nginx.org/HttpProxyModule
entropo

3
Якщо запит надсилається лише на проксі-сервер, як проксі може знати, до якої адреси призначення я хочу підключитися? Чи працює проксі на рівні http або на рівні tcp?
коді

Браузер, який робить запит на проксі, запитує повний URI. Потім проксі-сервер здійснює пошук DNS і створює власний HTTP-запит на цільовий сайт.
emgee

1
Http-проксі, як Squid (на якому я базував свою відповідь) працює на рівні програми.
emgee

1
@emgee: протокол HTTP також має метод CONNECT, тому можливе підключення через HTTP-проксі до сервера TCP (якщо проксі дозволяє), і що TCP-сервер не повинен бути сервером, який говорить HTTP.
vtest

2

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


1

Для використання проксі-сервера HTTP запит надсилається від клієнта на IP-адресу проксі-сервера, а не на цільовий сервер. Потім проксі-сервер повинен прочитати заголовок HTTP для вилучення URI-запиту . URI-запит включає ім'я або IP-адреса сервера призначення, а проксі-сервер використовує цю інформацію для пересилання запиту.

Специфікація HTTP дозволяє рядку запиту виключати ім’я та порт сервера, коли проксі не використовується (оскільки вони були б непотрібними, якщо запит буде надіслано безпосередньо на цей сервер). Але, відповідно до специфікації ...

Форма absolURI ВИМАГАЄТЬСЯ, коли запит робиться до проксі.

Отже, коли не використовується проксі, рядок запиту може виглядати так:

GET /robots.txt HTTP/1.1

але щоб використовувати проксі, рядок повинен містити ім'я сервера (і порт, якщо не 80):

GET http://httpbin.org:80/robots.txt HTTP/1.1

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


Від "HTTP Остаточний посібник", стор. 145: "HTTP / 1.1 тепер вимагає від серверів обробляти повний URI як для проксі, так і для запитів сервера, але на практиці багато розгорнутих серверів все ще приймають лише часткові URI."
nobar

Це не стандартний підхід, але проксі-сервер також може використовувати Hostзаголовок для завершення часткового URI, якщо в рядку запиту не вказаний абсолютний URI.
nobar

Цей підхід не може працювати, якщо з'єднання зашифроване кінцем (HTTPS). security.stackexchange.com/questions/101721/…
nobar

-7

Немає такого поняття, як "пакет tcp". TCP працює з потоками даних. Є пакети IP.

Вам, здається, не вистачає базових знань про мережу, я пропоную вам отримати хорошу книгу про TCP / IP. Улюбленим для всіх, здається, є "TCP / IP illustrated" від W. Richard Stevens.

Поверніться до свого питання.

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

[ви] - [проксі] - [сервер, до якого потрібно підключитися]

Зараз є два різних з'єднання:

[ви] - (ваше з'єднання з проксі) - [проксі] - (підключення проксі до сервера) - [сервер, до якого потрібно підключитися]

Якщо ви думаєте, що підключаєтесь до сервера через проксі, ви насправді підключаєтеся до проксі і говорите йому, що хочете дійти до певного сервера. Потім проксі відкриває друге з'єднання від себе до цього сервера і виступає посередником, передаючи дані в обох напрямках.


13
TCP-пакет - це IP-пакет з інформацією в заголовку TCP. Це звичайна мова. Будь ласка, не будьте настільки поблажливо грубими; це погано відбивається на вас, оскільки ви теж помиляєтесь.
Phil P
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.