HTTP-туннелирование используется для создания сетевого соединения между двумя компьютерами в условиях ограниченного сетевого подключения, включая межсетевые экраны , NAT и ACL , среди других ограничений. Туннель создается посредником, называемым прокси-сервером, который обычно находится в DMZ .
Туннелирование также может разрешить обмен данными с использованием протокола, который обычно не поддерживается в сети с ограниченным доступом.
HTTP CONNECT метод
Наиболее распространенной формой HTTP-туннелирования является стандартизированный метод HTTP CONNECT . [1] [2] В этом механизме клиент просит прокси-сервер HTTP перенаправить TCP- соединение в желаемый пункт назначения. Затем сервер устанавливает соединение от имени клиента. После того, как соединение было установлено сервером, прокси-сервер продолжает проксировать поток TCP к клиенту и от него. Только первоначальный запрос на соединение - это HTTP - после этого сервер просто проксирует установленное TCP-соединение.
Этот механизм позволяет клиенту за прокси-сервером HTTP получать доступ к веб-сайтам с помощью SSL или TLS (т. Е. HTTPS). Прокси-серверы также могут ограничивать соединения, разрешая соединения только с портом HTTPS по умолчанию 443, добавляя узлы в белый список или блокируя трафик, который не является SSL.
Пример переговоров
Клиент подключается к прокси-серверу и запрашивает туннелирование, указывая порт и хост-компьютер, к которому он хотел бы подключиться. Порт используется для указания запрошенного протокола. [3]
CONNECT streamline.t-mobile.com:22 HTTP / 1.1 Прокси-авторизация: базовые закодированные учетные данные
Если соединение было разрешено и прокси-сервер подключился к указанному хосту, прокси вернет ответ об успешном выполнении 2XX. [3]
HTTP / 1.1 200 ОК
Теперь клиент проксируется на удаленный хост. Любые данные, отправленные на прокси-сервер, теперь пересылаются в неизмененном виде на удаленный хост [3], и клиент может взаимодействовать с использованием любого протокола, принятого удаленным хостом. В приведенном ниже примере клиент запускает связь по SSH, на что указывает номер порта в начальном запросе CONNECT.
SSH-2.0-OpenSSH_4.3 \ r \ n...
§
HTTP-туннелирование без использования CONNECT
HTTP-туннель также может быть реализован с использованием только обычных HTTP-методов, таких как POST, GET, PUT и DELETE. Это похоже на подход, используемый в двунаправленных потоках через синхронный HTTP ( BOSH ).
В этой проверочной программе специальный HTTP-сервер работает вне защищенной сети, а клиентская программа запускается на компьютере внутри защищенной сети. Всякий раз, когда какой-либо сетевой трафик передается от клиента, клиент переупаковывает данные трафика в виде HTTP-запроса и передает данные внешнему серверу, который извлекает и выполняет исходный сетевой запрос для клиента. Ответ на запрос, отправленный на сервер, затем переупаковывается как HTTP-ответ и ретранслируется обратно клиенту. Поскольку весь трафик инкапсулируется в обычные запросы и ответы GET и POST, этот подход работает через большинство прокси-серверов и брандмауэров.
Смотрите также
Рекомендации
- ↑ Филдинг, Р. (июнь 1999 г.). «Определения методов, ПОДКЛЮЧЕНИЕ» . Протокол передачи гипертекста - HTTP / 1.1 . IETF . п. 56. сек. 9.9. DOI : 10,17487 / RFC2616 . RFC 2616 . Проверено 9 июля 2010 .
- ^ «Обновление до TLS в HTTP / 1.1 (RFC 2817)» . RFC 2817 . Проверено 3 июля 2011 года .
- ^ а б в «ПОДКЛЮЧИТЬСЯ» . HTTP / 1.1 Семантика и содержание . IETF . Июнь 2014. с. 30. сек. 4.3.6. DOI : 10,17487 / RFC7231 . RFC 7231 . Проверено 4 ноября 2017 года .