如何在客户端处理 HTTP CONNECT 隧道?

How to handle HTTP CONNECT tunnel on client side?

我正在向客户端添加对 HTTP CONNECT 请求的支持,但我似乎无法正确处理隧道。

我可以向代理发送一个 CONNECT 请求,该请求的状态代码为 200。这 RFC 告诉我隧道已经与终端服务器形成。

如何从套接字的角度使用此隧道? 在客户端,我打开的套接字最初收到来自代理的 200 响应。检查响应后,我是否应该向该套接字发送更多数据? 我试过这种方法,客户端就挂了。数据似乎没有到达最终服务器。创建隧道后如何使用此套接字进行正常的HTTP(S)?

After checking the response should I just send more data into that socket?

是的。如果您使用 HTTPS,您现在开始 TLS 握手,然后发送格式正确的 HTTP 请求并读取响应,均通过 TLS。

I tried this approach and the client just hangs. The data doesn't seem to reach the final server.

所以要么是你的握手错误,要么是你的 HTTP 格式不正确。