如何知道何时在HTTP代理连接中停止数据隧道

时间:2015-11-10 23:42:25

标签: http tcp proxy server protocols

我正在尝试编写自己的HTTP代理服务器,我对协议有疑问。

首先,我想提一下我使用this page作为参考。我认为这是准确的,但也是从1998年开始的。如果有人对我有更好的参考,我会很感激他们。

所以基本上我理解连接始于握手。我收到CONNECT请求,代理授权等。然后我连接到请求的资源URI中指定的主机和端口。然后我发送状态行,理想情况为HTTP/1.1 200 Connection established,然后是一些标题和正常的CRLF。

握手完成后,我的客户端和客户端要求的主机通过我的代理服务器连接。我应该在两个方向上挖掘数据,这是有道理的,因为我可以通过这个基于HTTP的代理连接支持任何类型的基于TCP的协议,包括HTTPS甚至WebSocket。

对我来说没有意义的是我怎么知道什么时候停下来。如果这个代理可以真正支持任何基于TCP的协议,那么我不明白如何知道交互何时结束。 HTTP消息将是一个简单的2步读写,HTTPS交互将涉及多个此类交换,并且WebSocket交互将涉及无限多次交换。

我不是要求一个完美的解决方案。我会很满意像超时那样务实的东西,但我想知道为了做这个项目我可以做什么标准的最佳实践。

感谢大家的帮助。

1 个答案:

答案 0 :(得分:2)

只需同时向两个方向复制数据,直到您读取流的结尾。然后:

  1. 关闭相对的插槽以进行写入并停止朝该方向复制。这将EOS传播给同行。
  2. 如果您阅读EOS的套接字已经关闭以进行写入,您必须记住,请关闭两个套接字。