我正在尝试用 C# 编写家庭代理服务器,我几乎成功了,但我在处理 HTTPS 请求(CONNECT)时遇到问题。
我真的不知道如何处理此类请求。
在我的研究中,我意识到对于这个请求,我们必须将客户端直接连接到目标主机。
这些请求的步骤(我意识到):
HTTP/1.1 200 Connection Established\r\n\r\n
给客户这是正确的吗?如果可以的话,c# 如何处理这个问题?
我的理解是
CONNECT www.example.com:443 HTTP/1.1
浏览器要求您在端口 443 上建立到 example.com 的连接。成功实现后,您应该发送
HTTP/1.1 200 Connection established\r\n\r\n
返回浏览器。您没有像我认为的那样将 CONNECT 字符串发送到服务器。另外,这个初始连接不应该被加密。
从此时起,浏览器和终端服务器将通过纯文本连接交换数据,您必须将其转发到正确的目的地。为此,套接字必须保持打开状态。但是,未指定通信顺序,因此不要依赖浏览器发送数据,然后服务器响应。两者都可以在任何时候发送数据。他们将首先建立自己的安全连接,然后开始执行通常的 http 请求。
希望这有帮助。
参考资料:
https://stackoverflow.com/a/24195792/1224132
https://datatracker.ietf.org/doc/html/draft-luotonen-ssl-tunneling-03