Для наявного дескриптора libcurl явно розділіть списки заголовків призначення та проксі:

curl_easy_setopt(handle, CURLOPT_HEADEROPT, (long)CURLHEADER_SEPARATE);
curl_easy_setopt(handle, CURLOPT_PROXYHEADER, proxy_headers);
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, origin_headers);

Тримайте налаштований дескриптор і чинні списки живими під час передавання. CURLHEADER_SEPARATE розрізняє заголовки, що використовуються на CONNECT, від заголовків, що використовуються для запиту до призначення. Старіші приклади єдиної політики можуть вміщувати звичайний список в обидва обміни.

Шлях запитуЗначення окремих списків
HTTPS усередині звичайного тунелю CONNECTСпочатку відбувається обмін із проксі; потім HTTP-заголовки призначення йдуть усередині TLS призначення.
Звичайне пересилання HTTPПроксі може читати заголовки призначення, а libcurl може використовувати обидва застосовні списки в одному пересланому запиті.

Маркер маршрутизації лише для проксі належить обміну з проксі. Під час пересилання відкритим текстом довільне налаштоване поле може досягти джерела, якщо схема пересилання його не обробляє; назва параметра не є гарантією конфіденційності.

Використовуйте підтримувані параметри облікових даних для автентифікації. Для метаданих, визначених оператором, установіть, який крок їх споживає і чи можна їх пересилати, замість того щоб вміщувати пароль у загальному полі.

Коли маркер відсутній або виглядає так, що витікає, визначте фактичний запит, що його містить. Зворотний виклик заголовків, який показує кілька обмінів, може змусити правильно розділені списки виглядати змішаними.

Схожі статті