把 Go 的 CONNECT 头放到 Transport 上
在 CONNECT 期间向 HTTP 代理发送必需的头部,而不是把它加到目标请求上。
添加到 http.Request.Header 的头部描述的是目标请求。当 HTTPS 使用 HTTP 代理时,transport 会先执行 CONNECT。目标请求的头部并不是用于那次更早交换的通用配置 API。
对于代理要求的静态头部,请配置 transport 的 ProxyConnectHeader:
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
ProxyConnectHeader: http.Header{
"X-Proxy-Account": []string{"example-account"},
},
}这里的 proxyURL 是解析后的端点 URL。该头部只是示例,只有在代理运营方定义了这样的字段时才有用。
对于按代理或目标选择的值,请使用 GetProxyConnectHeader。文档中说明的回调会收到代理 URL 和 CONNECT 目标。当该回调不为 nil 时,静态的 ProxyConnectHeader 字段会被忽略。
让值保持在预期的范围内。只用于代理的账号标记属于与代理的交换;网站的授权值属于目标请求。如果回调无法生成所需的握手值,应返回其错误,而不是悄悄发送一个配置不同的请求。
这些设置用于定制 CONNECT 的处理方式。它们不会发明自定义认证协议,也不会改变代理服务的访问策略。