HTTP隧道是否在相同的插座上进行



我正在尝试实现用于学习和调试目的的HTTP代理。

普通HTTP交易的支持非常简单,现在我希望实现对SSL/TLS隧道的支持。

来自RFC 7230:

"隧道"充当两个没有两个连接之间的盲人继电器 更改消息。一旦活跃,隧道就被视为一场聚会 尽管隧道可能已经启动了HTTP通信 通过HTTP请求。

目前尚不清楚我是否应该从HTTP连接交易的插座上构建TLS插座。我认为是这种情况,因为HTTP是无状态的,但我只想确定。

当客户端连接到HTTP代理时,CONNECT用于使代理与目标TCP服务器建立持久的TCP连接。然后,代理在两个TCP连接之间来回传递数据,直到客户端或服务器断开连接为止,然后代理断开另一方。这允许客户端将数据发送到服务器,反之亦然,例如TLS数据包。这很重要,因此TLS服务器可以在TLS握手期间验证客户端的身份。

因此,要回答您的问题 - 是的,客户必须使用与发布CONNECT请求相同的TCP套接字与目标服务器建立TLS会话。CONNECT请求成功后,客户端可以将现有的TCP连接视为直接连接到服务器的现有TCP连接。当时代理是透明的,双方都不需要关心它的存在。

最新更新