Separe os cabeçalhos de proxy do libcurl dos cabeçalhos do site
Dê ao libcurl listas separadas de cabeçalhos de proxy e de destino, reconhecendo que o encaminhamento em texto simples tem um limite de visibilidade diferente.
Para um handle libcurl existente, separe explicitamente as listas de cabeçalhos de destino e 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); Mantenha o handle configurado e as listas válidas ativos durante a transferência. CURLHEADER_SEPARATE distingue os cabeçalhos usados em CONNECT dos cabeçalhos usados para o pedido de destino. Exemplos antigos de política unificada podem colocar a lista comum nas duas trocas.
| Caminho do pedido | Significado das listas separadas |
|---|---|
| HTTPS dentro de um túnel CONNECT comum | A troca com o proxy vem primeiro; depois os cabeçalhos HTTP de destino seguem dentro do TLS de destino. |
| Encaminhamento HTTP simples | O proxy pode ler os cabeçalhos de destino, e o libcurl pode usar ambas as listas aplicáveis no único pedido encaminhado. |
Um marcador de encaminhamento apenas para o proxy pertence à troca com o proxy. Com encaminhamento em texto simples, um campo personalizado arbitrário pode chegar à origem, a menos que a disposição de encaminhamento o trate; o nome da opção não é garantia de confidencialidade.
Use opções de credenciais suportadas para autenticação. Para metadados definidos pelo operador, determine qual salto os consome e se podem ser encaminhados em vez de colocar uma palavra-passe num campo genérico.
Quando um marcador está ausente ou parece estar a escapar, identifique o pedido real que o contém. Um callback de cabeçalhos que mostra várias trocas pode fazer listas corretamente separadas parecerem misturadas.