Изменяют ли прокси-серверы HTTP пакеты запросов?

Добавляется или изменяется ли какой-либо заголовок запроса в HTTP-запрос перед пересылкой на сервер прокси-сервером?

Если да, то вносятся ли изменения в те же пакеты или содержимое используется для создания новых пакетов запросов с изменениями?


person Ashwin    schedule 29.04.2012    source источник


Ответы (1)


Существует несколько различных типов прокси-серверов. Поскольку вы упомянули заголовки запросов, я предполагаю, что вы говорите о прокси-серверах HTTP, которые пересылают HTTP-запросы, а не пакеты.

ПРИМЕЧАНИЕ. В особом случае запросов HTTPS (TLS/SSL через CONNECT), прокси-серверы будут просто пересылать содержимое TCP-пакеты (и не могут проверять пакеты, если только они не действуют в качестве человека в -средний прокси).


Конечно, это зависит от программного обеспечения прокси-сервера и его конфигурации, но ожидается, что прокси-серверы HTTP будут следовать Руководство для прокси-серверов преобразования веб-контента, в котором говорится о многих вещах, но наиболее важно:

  • Кроме преобразования между HEAD и GET прокси не должны изменять методы запроса.

  • Если запрос содержит директиву Cache-Control: no-transform, прокси-серверы не должны изменять запрос, кроме как для соблюдения прозрачного поведения HTTP, определенного в разделах 14.9.5 и 13.5.2 RFC 2616 HTTP, и для добавления полей заголовка, как описано в 4.1.6 Дополнительные поля заголовка HTTP.

  • За исключением изменений, требуемых RFC 2616, прокси-серверы HTTP не должны изменять значения полей заголовка, кроме полей заголовка User-Agent, Accept, Accept-Charset, Accept-Encoding и Accept-Language, и не должны удалять поля заголовка.

  • Прокси должны добавлять IP-адрес инициатора запроса в конец списка, разделенного запятыми, в X-Forwarded-For Поле заголовка HTTP.

  • Прокси должны (в соответствии с RFC 2616) включать поле заголовка HTTP Via.


Таким образом, обычно можно ожидать, что эти заголовки HTTP будут изменены/добавлены прокси-сервером, соответствующим стандартам:

  • User-Agent
  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • X-Forwarded-For
  • Via
person Xenon    schedule 29.04.2012
comment
Я не получаю часть пересылаемых запросов, а не пакетов. Вы имеете в виду, что он восстановит http-запрос из входящих пакетов, а затем изменит их? - person Ashwin; 29.04.2012
comment
@Ashwin: я думаю, вы неправильно понимаете протокол HTTP. HTTP — это прикладной протокол, который находится на прикладном уровне модели OSI< /а>. Все «пакеты» HTTP на самом деле представляют собой TCP-пакеты, и HTTP не работает с пакетами напрямую (все это происходит на уровнях транспортного и сетевого модель OSI). - person Xenon; 29.04.2012
comment
когда я делаю запрос в баузере, таком как www.google.com, этот запрос перемещается с уровня приложения (браузера) прямо на физический уровень (который является сетевым адаптером). Теперь прокси-сервер извлекает его, а затем декодирует данные физического уровня на уровень 2 и так далее... для транспортировки (уровень 4). здесь он изменяет данные, а затем пересылает их правильно? - person Ashwin; 29.04.2012
comment
@Ashwin: Ты почти понял. ВСЕ действия HTTP происходят на уровне 7 (приложение). Когда вы делаете запрос, он проходит с уровня 7 вниз на уровень 1, затем в пункте назначения (прокси-сервере) он переходит с уровня 1 на уровень 7, где выполняются заголовки HTTP. Отсюда он вернется на уровень 1 при отправке на www.google.com и так далее. - person Xenon; 29.04.2012
comment
@Xenon, просто деталь: на самом деле, когда дело доходит до HTTPS-запросов (через CONNECT), они пересылают содержимое TCP-пакетов, не глядя (или имея возможность смотреть, если только не прокси-сервер MITM), являются ли они HTTP-запросами. - person Bruno; 04.05.2012
comment
@ Бруно Да, я должен был включить это в свой ответ ... отредактировано. Ваше здоровье. - person Xenon; 04.05.2012
comment
Если заголовки изменены, «завершается» ли запрос на прокси-серверах, и прокси-серверы повторно инициируют (устанавливают) соединение (с измененными заголовками) с серверами приложений? - person kaizenCoder; 24.01.2017