Завершіть розбір заголовків 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 до запуску тунельного протоколу. Обидві сторони мають домовитися про межу, на якій потік змінює роль.