После строки запроса CONNECT эти байты всё ещё принадлежат прокси:

CONNECT service.example:443 HTTP/1.1\r\n
Host: service.example:443\r\n
User-Agent: example-client\r\n
\r\n

Пересылка Host или User-Agent на порт 443 передаёт назначению заголовки открытым текстом там, где оно ожидает TLS. Эта ошибка может возникнуть ещё до того, как выбор шифра станет важен.

  1. Читайте и разбирайте до терминатора заголовков с пустой строкой, в пределах срока настройки и ограничения размера заголовков.
  2. Примените аутентификацию прокси и политику назначения.
  3. Установите одобренное соединение с целью.
  4. Отправьте успешный ответ CONNECT и перейдите в режим туннеля.

Сохраните буферизованные байты после границы для соответствующего следующего состояния. Не отбрасывайте их и не рассматривайте заголовки запроса прокси как последующий запрос сайта.

У клиента есть симметричная обязанность на стороне ответа: завершить чтение успешного ответа CONNECT до запуска туннельного протокола. Обе стороны должны договориться о границе, на которой поток меняет роль.

Похожие статьи