Separe los encabezados de proxy de libcurl de los encabezados del sitio web
Dé a libcurl listas separadas de encabezados de proxy y de destino, reconociendo que el reenvío en texto plano tiene un límite de visibilidad distinto.
Para un identificador de libcurl existente, separe explícitamente las listas de encabezados de destino y de proxy:
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); Mantenga vivo el identificador configurado y las listas válidas durante la transferencia. CURLHEADER_SEPARATE distingue los encabezados usados en CONNECT de los encabezados usados para la solicitud de destino. Los ejemplos antiguos de política unificada pueden poner la lista ordinaria en ambos intercambios.
| Ruta de la solicitud | Significado de las listas separadas |
|---|---|
| HTTPS dentro de un túnel CONNECT ordinario | El intercambio con el proxy va primero; después siguen los encabezados HTTP de destino dentro del TLS de destino. |
| Reenvío HTTP simple | El proxy puede leer los encabezados de destino, y libcurl puede usar ambas listas aplicables en la única solicitud reenviada. |
Un marcador de enrutamiento solo para el proxy pertenece al intercambio con el proxy. Con el reenvío en texto plano, un campo personalizado arbitrario puede llegar al origen a menos que la disposición de reenvío lo maneje; el nombre de la opción no es garantía de confidencialidad.
Utilice opciones de credenciales compatibles para la autenticación. Para los metadatos definidos por el operador, determine qué salto los consume y si se pueden reenviar en lugar de poner una contraseña en un campo genérico.
Cuando falte un marcador o parezca filtrarse, identifique la solicitud real que lo contiene. Una devolución de llamada de encabezados que muestra varios intercambios puede hacer que listas correctamente separadas parezcan mezcladas.