Перейти до вмісту
Глоссарий 7 хв читання 32 переглядів

HTTP Заголовки

Дослідіть важливі заголовки HTTP-проксі: X-Forwarded-For, Via та інші. Дізнайтеся, як ці заголовки розкривають IP-адреси клієнтів і шляхи проксі-серверів.

HTTP
HTTP Заголовки

Заголовки HTTP-проксі, такі як X-Forwarded-For та Via, використовуються проксі-серверами для передачі інформації про оригінального клієнта, шлях запиту та інші контекстні дані до вихідного сервера, які інакше були б приховані присутністю проксі.

Коли HTTP-запит проходить через один або кілька проксі-серверів, безпосередній вихідний сервер зазвичай бачить IP-адресу останнього проксі, а не оригінального клієнта. Заголовки проксі вирішують цю проблему, додаючи або змінюючи певні HTTP-заголовки, дозволяючи передавати IP-адресу, протокол, хост оригінального клієнта та послідовність проксі до кінцевого сервера призначення.

X-Forwarded-For

Заголовок X-Forwarded-For (XFF) є фактичним стандартним заголовком, який використовується для ідентифікації вихідної IP-адреси клієнта, що підключається до веб-сервера через HTTP-проксі або балансувальник навантаження.

Призначення

Його основне призначення полягає в тому, щоб дозволити веб-серверу отримувати доступ до IP-адреси оригінального клієнта для ведення журналів, аналітики, безпеки та логіки, специфічної для програми (наприклад, контроль доступу на основі IP, геолокація). Без XFF усі запити виглядали б так, ніби вони надходять з IP-адреси проксі-сервера.

Формат та приклади

Заголовок XFF може містити список IP-адрес, розділених комами. Коли запит проходить через кілька проксі, кожен проксі додає IP-адресу клієнта, який до нього підключився, до заголовка XFF.

  • X-Forwarded-For: <client>, <proxy1>, <proxy2>

Приклад 1: Один проксі
Клієнт (192.0.2.1) підключається до проксі (198.51.100.1), який потім підключається до вихідного сервера.
Проксі додає:

X-Forwarded-For: 192.0.2.1

Вихідний сервер бачить запит, що надходить від 198.51.100.1 та X-Forwarded-For: 192.0.2.1.

Приклад 2: Кілька проксі
Клієнт (192.0.2.1) підключається до Проксі А (198.51.100.1), який підключається до Проксі Б (203.0.113.1), який потім підключається до вихідного сервера.
1. Клієнт до Проксі А: Проксі А додає X-Forwarded-For: 192.0.2.1.
2. Проксі А до Проксі Б: Проксі Б отримує X-Forwarded-For: 192.0.2.1. Проксі Б додає до нього 198.51.100.1.
Заголовок стає: X-Forwarded-For: 192.0.2.1, 198.51.100.1.
3. Проксі Б до Вихідного сервера: Вихідний сервер отримує X-Forwarded-For: 192.0.2.1, 198.51.100.1.

У ланцюжку проксі-серверів найлівіша IP-адреса зазвичай є оригінальним клієнтом. Найправіша IP-адреса – це IP безпосереднього вихідного проксі (клієнта, який підключився до поточного проксі).

Міркування безпеки для X-Forwarded-For

Заголовок X-Forwarded-For може бути легко підроблений зловмисним клієнтом. Клієнт може надіслати запит із сфабрикованим заголовком X-Forwarded-For.

GET / HTTP/1.1
Host: example.com
X-Forwarded-For: 10.0.0.1, 1.1.1.1

Якщо проксі сліпо додає до цього, заголовок, отриманий вихідним сервером, може виглядати як X-Forwarded-For: 10.0.0.1, 1.1.1.1, <proxy_ip>.
Тому нижні програми не повинні довіряти всьому значенню заголовка X-Forwarded-For безпосередньо. Загальноприйнятою практикою є довіряти лише найправішій ненадійній IP-адресі у списку як фактичній IP-адресі клієнта, після видалення будь-яких записів, що належать до відомих довірених проксі. Багато веб-серверів та фреймворків додатків надають механізми для вказівки списку довірених проксі.

Via

Заголовок Via є стандартним HTTP-заголовком, який вказує проміжні проксі та шлюзи, через які пройшов запит (або відповідь).

Призначення

Заголовок Via служить кільком цілям:
* Відстежуваність: Він забезпечує трасування ланцюжка проксі, що корисно для налагодження мережевих шляхів.
* Виявлення циклів: Він може допомогти виявити цикли запитів у ланцюжках проксі.
* Сумісність протоколів: Він сигналізує про версії протоколів, що використовуються кожним проміжним проксі, що може бути актуальним для перетворення протоколів.

Формат та приклади

Кожен проксі додає свій власний запис Via до заголовка. Формат для кожного запису: protocol-name/protocol-version host:port (comment). Поле comment є необов'язковим і може містити довільну інформацію.

Via: <protocol-name>/<protocol-version> <host>:<port> (comment)

Приклад:
Клієнт надсилає запит, який проходить через Проксі А (ім'я хоста proxy-a.example.com, порт 8080) та Проксі Б (ім'я хоста proxy-b.example.com, порт 80).

  1. Клієнт до Проксі А: Проксі А додає Via: HTTP/1.1 proxy-a.example.com:8080.
  2. Проксі А до Проксі Б: Проксі Б отримує Via: HTTP/1.1 proxy-a.example.com:8080. Проксі Б додає свій власний запис на початку.
    Заголовок стає: Via: 1.1 proxy-b.example.com, 1.1 proxy-a.example.com:8080.
    (Примітка: HTTP/ часто опускається, якщо це HTTP, а порт 80/443 може бути опущений.)
  3. Проксі Б до Вихідного сервера: Вихідний сервер отримує повний заголовок Via.

Конфіденційність та операційні міркування

Заголовок Via розкриває внутрішню топологію мережі та імена хостів, що може бути проблемою безпеки або конфіденційності в деяких розгортаннях. Організації можуть вирішити видалити або змінити цей заголовок для зовнішніх проксі, щоб запобігти розкриттю внутрішньої мережі.

Forwarded

Заголовок Forwarded є стандартизованим заголовком, визначеним у RFC 7239, призначеним для заміни фактичних заголовків X-Forwarded-For, X-Forwarded-Host та X-Forwarded-Proto.

Призначення

Він забезпечує більш структурований та розширюваний спосіб передачі інформації про оригінального клієнта, сам проксі та оригінальний контекст запиту (хост, протокол) до вихідного сервера.

Формат та приклади

Заголовок Forwarded може містити один або кілька наборів параметрів, розділених комами, що представляють кожен проксі в ланцюжку. Кожен набір параметрів використовує пари ключ-значення. Загальні параметри включають:
* for: IP-адреса (або обфускований ідентифікатор) оригінального клієнта.
* by: IP-адреса (або обфускований ідентифікатор) проксі, який переслав запит.
* host: Оригінальний заголовок Host, запитаний клієнтом.
* proto: Оригінальний протокол (наприклад, http або https), використаний клієнтом.

Forwarded: for=<client_ip>; proto=<protocol>; host=<original_host>
Forwarded: for=<client_ip>, for=<proxy_ip>; proto=<protocol>

Приклад 1: Один проксі
Клієнт (192.0.2.1) підключається через HTTPS до проксі (198.51.100.1), запитуючи example.com.
Проксі додає:

Forwarded: for=192.0.2.1; proto=https; host=example.com

Приклад 2: Кілька проксі
Клієнт (192.0.2.1) -> Проксі А (198.51.100.1) -> Проксі Б (203.0.113.1) -> Вихідний сервер.
1. Клієнт до Проксі А: Проксі А додає Forwarded: for=192.0.2.1; proto=https; host=example.com.
2. Проксі А до Проксі Б: Проксі Б отримує заголовок. Проксі Б додає свій власний запис, включаючи by для ідентифікації себе.
Заголовок стає:
Forwarded: for=192.0.2.1; proto=https; host=example.com, for=198.51.100.1; by=203.0.113.1
(Примітка: Параметри host та proto зазвичай включаються лише в перший запис для оригінального клієнта, якщо проксі не виконує переписування протоколу або хоста.)

Порівняння: X-Forwarded-For проти Forwarded

Функція X-Forwarded-For Forwarded
Статус стандарту Де-факто стандарт (нестандартний заголовок X-) Стандарт RFC 7239
Інформація Лише IP-адреси клієнта IP-адреса клієнта, IP-адреса проксі (by), оригінальний хост, оригінальний протокол (proto)
Структура Список IP-адрес, розділених комами Список структурованих наборів параметрів ключ-значення, розділених комами
Розширюваність Обмежено IP-адресами Високо розширюваний з додатковими параметрами
Прийняття Широко підтримується існуючим програмним забезпеченням та інфраструктурою Зростаюче прийняття, але наразі менш повсюдний, ніж XFF
Безпека Вразливий до спуфінгу; вимагає ретельного аналізу Все ще вразливий до спуфінгу; структурований аналіз сприяє надійності

Інші заголовки проксі

X-Forwarded-Host

Цей де-факто заголовок ідентифікує оригінальний Host, запитаний клієнтом у заголовку HTTP-запиту Host. Він корисний, коли проксі або балансувальник навантаження змінює заголовок Host (наприклад, для внутрішньої маршрутизації) перед пересиланням запиту до вихідного сервера, але програмі потрібно знати оригінальний хост, запитаний клієнтом, для таких завдань, як генерація абсолютних URL-адрес або обробка віртуальних хостів.

Приклад:
Клієнт запитує example.com. Проксі пересилає на внутрішній хост app-server-1.

Host: app-server-1
X-Forwarded-Host: example.com

X-Forwarded-Proto

Цей де-факто заголовок ідентифікує протокол (HTTP або HTTPS), який клієнт використовував для підключення до проксі або балансувальника навантаження. Це має вирішальне значення, коли проксі виконує термінацію SSL/TLS, тобто клієнт підключається через HTTPS, але проксі зв'язується з бекенд-сервером через звичайний HTTP. Програмі потрібно знати оригінальний протокол для генерації правильних посилань (наприклад, https:// замість http://).

Приклад:
Клієнт підключається через HTTPS до балансувальника навантаження. Балансувальник навантаження підключається через HTTP до бекенду.

X-Forwarded-Proto: https

X-Real-IP

Це ще один де-факто заголовок, який зазвичай використовується NGINX, для передачі IP-адреси оригінального клієнта. На відміну від X-Forwarded-For, він зазвичай містить лише одну IP-адресу — оригінального клієнта або безпосереднього вихідного довіреного проксі. Його часто встановлює перший проксі в ланцюжку після перевірки заголовка X-Forwarded-For.

Приклад:

X-Real-IP: 192.0.2.1

Практичні наслідки та випадки використання

Заголовки проксі є фундаментальними для належної роботи та безпеки в сучасних веб-архітектурах, що включають проксі, балансувальники навантаження та CDN.

  • Ведення журналів та аналітика: Точні IP-адреси клієнтів є важливими для журналів доступу веб-сервера, аналізу трафіку та відстеження поведінки користувачів.
  • Безпека:
    • Контроль доступу на основі IP: Обмеження доступу до певних ресурсів на основі IP-адрес клієнтів.
    • Обмеження швидкості: Запобігання зловживанням або DDoS-атакам шляхом обмеження запитів на IP-адресу клієнта.
    • Брандмауери веб-додатків (WAF): Застосування правил безпеки на основі ідентифікації оригінального клієнта.
    • Геолокація: Визначення географічного розташування користувача для налаштування вмісту або відповідності вимогам.
  • Логіка програми:
    • Генерація URL-адрес: Програмам потрібні X-Forwarded-Host та X-Forwarded-Proto для побудови правильних абсолютних URL-адрес (наприклад, для перенаправлень або посилань у програмі), які відповідають оригінальному запиту клієнта.
    • Управління сесіями: Деякі механізми сесій можуть бути прив'язані до IP-адрес.
    • Багатокористувацькі програми: Розрізнення користувачів на основі оригінального заголовка Host.
  • Налагодження та усунення несправностей: Заголовок Via та повний ланцюжок X-Forwarded-For можуть допомогти діагностувати проблеми з мережевим шляхом та ідентифікувати проблемні проксі.

Конфігурація проксі та найкращі практики безпеки

Правильна конфігурація проксі для обробки цих заголовків має вирішальне значення.

  • Межі довіри: Довіряйте записам X-Forwarded-For (або Forwarded) лише від відомих та довірених вихідних проксі. Реалізуйте логіку для аналізу заголовка, ідентифікації довірених IP-адрес проксі та отримання справжньої IP-адреси клієнта з найправішого ненадійного запису.
  • Видалення/санітизація заголовків: Для зовнішніх проксі розгляньте можливість видалення або санітизації заголовків Via та будь-яких внутрішніх користувацьких заголовків X-, щоб запобігти розкриттю інформації про внутрішню топологію мережі.
  • Послідовність: Переконайтеся, що всі проксі та балансувальники навантаження в ланцюжку налаштовані послідовно для правильного додавання або встановлення цих заголовків.
  • Стандартні проти користувацьких: Хоча Forwarded є стандартом, X-Forwarded-For, X-Forwarded-Host та X-Forwarded-Proto залишаються широко використовуваними. Реалізації часто підтримують обидва або надають пріоритет заголовку Forwarded, якщо він присутній.
Оновлено: 03.03.2026
Назад до категорії

Спробуйте наші проксі

20,000+ проксі в 100+ країнах світу

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.