Как обрабатывать туннель HTTP CONNECT на стороне клиента?

Я добавляю клиенту поддержку HTTP-запроса CONNECT и не могу правильно обработать туннель.

Я могу отправить запрос CONNECT на прокси-сервер, который отвечает с кодом состояния 200. Этот RFC сообщите мне, что туннель был сформирован с конечным сервером.

Как использовать этот туннель с точки зрения сокета? На стороне клиента сокет, который я открыл, сначала получает ответ 200 от прокси. После проверки ответа я должен просто отправить больше данных в этот сокет? Я попробовал этот подход, и клиент просто завис. Данные, похоже, не достигают конечного сервера. Как использовать этот сокет для обычного HTTP(S) после создания туннеля?


person whoami    schedule 02.06.2017    source источник


Ответы (1)


После проверки ответа я должен просто отправить больше данных в этот сокет?

Да. Если вы говорите по протоколу HTTPS, вы теперь запускаете рукопожатие TLS, а затем отправляете правильно сформированный HTTP-запрос и читаете ответ, оба через TLS.

Я попробовал этот подход, и клиент просто завис. Данные, похоже, не достигают конечного сервера.

Так что либо ваше рукопожатие было неправильным, либо ваш HTTP был искажен.

person user207421    schedule 03.06.2017
comment
Я все еще исследую файлы pcap. Сообщил бы о правильном решении, как только я закончу. - person whoami; 03.06.2017
comment
«Правильное решение» — исправить ваш код. Поскольку вы не опубликовали его, какой другой ответ возможен? - person user207421; 03.06.2017
comment
Ага. Я исправил это сейчас, и это была проблема с порядком, в котором я отправлял заголовки и строки запроса. HTTP был в некотором смысле искажен, и я думаю, что могу отметить ваш ответ как правильный. - person whoami; 03.06.2017