Как правильно эмулировать TCP-соединение через HTTP (s) прокси? - PullRequest
6 голосов
/ 26 мая 2011

Одно из моих приложений подключается к серверному модулю, который обычно устанавливается на другом компьютере, иногда в Интернете. В некоторых сценариях развертывания пользователи не имеют прямого доступа в Интернет - только прокси-серверы HTTP (s). Поэтому мне нужно научить мою программу использовать HTTP-прокси для эмуляции асинхронного TCP-соединения с сервером. В Интернете много информации об этой теме, и с HTTPS-прокси это действительно просто - просто отправьте «HTTP CONNECT» на порт 443 серверного приложения, отправьте ответный ответ, и вы сможете отправлять и получать двоичные данные по своему усмотрению.

Но некоторые пользователи отключили HTTPS на прокси-серверах, поэтому у них есть только HTTP. И есть ряд проблем с HTTP из-за того, что прокси-сервер активно проверяет трафик, пытается его кэшировать, накапливать и т. Д. 2 соединения с одним бесконечным HTTP-запросом «GET» и одним бесконечным HTTP-ответом работают, но разные прокси-серверы предлагают разные проблемы - Например, Microsoft IIS не отправляет небольшие порции данных мгновенно и пытается их накапливать: (.

Итак, мой вопрос: это какой-то хорошо зарекомендовавший себя способ эмуляции полнодуплексного TCP-соединения через HTTP-прокси без поддержки HTTPS? Может быть, я могу использовать или купить какой-нибудь открытый исходный код или коммерческую реализацию? Любые намеки приветствуются! Я действительно не хочу создавать решение, которое будет работать только на небольшом количестве прокси, поэтому мне нужна либо уже существующая и протестированная реализация, либо хорошее руководство:).

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Это несколько других вопросов о SO.

Вообще говоря, вы не можете предполагать, что HTTP-прокси позволит вам выполнять потоковую передачу по TCP / IP через соединение. Это то, что подробно обсуждалось в рабочей группе HTML5 WebSockets.

В некоторых случаях вы можете сделать HTTP-запрос, используя глагол CONNECT, запрашивающий у прокси-сервера создать «слепой» двунаправленный туннель к целевому серверу / комбинированному порту. Однако прокси-сервер вполне может отказаться от этого для любого целевого порта, кроме 443 (чтобы точно предотвратить то, что вы пытаетесь сделать), и прокси-сервер МОЖЕТ попытаться отсканировать или иным образом изменить трафик, отправляемый на него.

Прокси-сервер SOCKS, напротив, разработан для того, чтобы делать в точности то, что вы пытаетесь сделать. Но прокси SOCKS относительно редки.

3 голосов
/ 01 июня 2011

Существует несколько существующих решений для эмуляции долгоживущих TCP-соединений поверх HTTP.

Одним из широко используемых методов в случае XMPP является спецификация BOSH .Хотя BOSH был первоначально разработан сообществом Jabber / XMPP, он не ограничивается XMPP и может транспортировать произвольные полезные данные, такие как XML или JSON.

Вот другие полезные ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...