# HTTP CONNECT

HTTP CONNECT 是客户端发送给 HTTP 代理的请求方法，用于请求建立通往某个主机和端口（通常为 443 端口）的 TCP 隧道。代理返回 200 后，客户端便通过该隧道直接与目标通信并协商端到端 TLS，因此代理只能看到目标名称和加密字节。所有 HTTPS 请求都是以这种方式通过 HTTP 代理传输的。


## 通信过程

```http
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjpwYXNz

HTTP/1.1 200 Connection established

<随后向 example.com 发送 TLS ClientHello>
```


## 由此产生的影响

- 证书由目标网站自行提供，不会经过重新签名。通过代理时出现证书警告，说明流量遭到拦截，并非正常行为。
- 定位参数必须包含在代理凭据中，因为代理不会读取加密请求。
- 隧道打开前出现的错误（407、400、502）来自代理；打开后出现的错误来自目标网站。


## 连接其他端口

CONNECT 可以为任何 TCP 端口建立隧道，因此 HTTP 代理也能承载 HTTPS 以外的协议。为防止滥用，提供商会限制部分目标端口（邮件使用的 25 端口是最典型的禁用项）。


## 在 ProxShift 中的工作方式

ProxShift 网关通过 9000 端口、独享地址通过 8000 端口接受 CONNECT，可连接除 25 以外的任何 TCP 端口；隧道内容会原样透传，TLS 绝不会在代理处终止。

来源：https://proxshift.com/zh/glossary/https-connect
