У нас есть модельная программа C \ S. И пользователи используют клиент для подключения нашего сервера. Но некоторые пользователи компании выходят в Интернет через HTTP-прокси-сервер (не SOCKS4 или SOCKS5 прокси-сервер). В этом случае нам нужно предоставить функцию для настройки прокси-сервера клиента (как и некоторые другие программы). Если это так, мы должны упаковать наши исходные данные в протокол Http. Итак, я хочу знать:
Это не так, как работают HTTP прокси. Вам не нужно переупаковывать существующие данные как HTTP. Все, что вам нужно сделать, это:
подключиться к прокси-порту HTTP и отправить ему HTTP CONNECT
запрос с указанием хоста / IP и порта для подключения, например:
CONNECT hostname:port HTTP/1.0
User-agent: MyApp
Если прокси-сервер требует аутентификации, вы также можете предоставить Proxy-authorization
заголовок, содержащий закодированные учетные данные при необходимости, например:
CONNECT hostname:port HTTP/1.0
User-agent: MyApp
Proxy-authorization: basic dGVzdDp0ZXN0
если прокси-сервер принимает запрос и успешно подключается к запрошенному хосту, он отправит обратно HTTP 200
ответ, например:
HTTP/1.0 200 Connection established
Proxy-agent: ProxyApp/1.1
Теперь вы можете отправлять и получать данные, как вы уже делали раньше, и прокси-сервер будет передавать данные как есть между клиентом и хостом в обоих направлениях. Вам не нужно изменять какую-либо логику кода, кроме как для установки прокси-соединения.
Увидеть Туннелирование протоколов на основе TCP через прокси-серверы
Больше подробностей.
Этот процесс аналогичен тому, как работают другие прокси-протоколы, такие как SOCKS. Клиент подключается к прокси-серверу, запрашивает соединение с хостом сервера, а затем клиент и сервер передают данные назад и вперед, как будто прокси-сервер отсутствует.
Других решений пока нет …