Завершите разбор заголовков CONNECT до пересылки клиентского потока
Прокси-сервер, который пересылает только после строки запроса, может отправить свой заголовок Host на TLS-порт назначения.
После строки запроса 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. Эта ошибка может возникнуть ещё до того, как выбор шифра станет важен.
- Читайте и разбирайте до терминатора заголовков с пустой строкой, в пределах срока настройки и ограничения размера заголовков.
- Примените аутентификацию прокси и политику назначения.
- Установите одобренное соединение с целью.
- Отправьте успешный ответ CONNECT и перейдите в режим туннеля.
Сохраните буферизованные байты после границы для соответствующего следующего состояния. Не отбрасывайте их и не рассматривайте заголовки запроса прокси как последующий запрос сайта.
У клиента есть симметричная обязанность на стороне ответа: завершить чтение успешного ответа CONNECT до запуска туннельного протокола. Обе стороны должны договориться о границе, на которой поток меняет роль.