我试图用C#编写一个家庭代理服务器,但我几乎成功了,但我处理HTTPS请求时遇到问题(CONNECT)。
我真的不知道如何处理这类请求。
在我的研究中,我意识到对于这个请求,我们必须直接将客户端连接到目标主机。
这些请求的步骤(我意识到):
HTTP/1.1 200 Connection Established\r\n\r\n
发送给客户这是对的吗?如果没问题,请用c#来处理这个问题?
答案 0 :(得分:2)
我的理解是
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