将 libcurl 的代理标头与网站标头分开
为 libcurl 提供相互独立的代理和目标标头列表,并认识到明文转发具有不同的可见性边界。
对于现有的 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 上使用的标头与用于目标请求的标头。较早的统一策略示例可能会把普通列表放入两个交换中。
| 请求路径 | 独立列表的含义 |
|---|---|
| 普通 CONNECT 隧道内的 HTTPS | 先进行代理交换;随后目标 HTTP 标头在目标 TLS 内传输。 |
| 普通 HTTP 转发 | 代理可以读取目标标头,libcurl 可以在同一个转发请求上使用两个适用的列表。 |
仅用于代理的路由标记属于代理交换。在明文转发中,任意自定义字段都可能到达源站,除非转发安排对其加以处理;该选项的名称并不构成保密保证。
使用受支持的凭据选项进行身份验证。对于由运维人员定义的元数据,应确定哪一跳会使用它,以及是否可以转发,而不是把密码放进通用字段。
当标记缺失或看起来发生泄漏时,找出实际包含它的请求。显示多次交换的标头回调可能让正确分离的列表看起来像是混在了一起。