我正在尝试编写自己的HTTP代理服务器,我对协议有疑问。
首先,我想提一下我使用this page作为参考。我认为这是准确的,但也是从1998年开始的。如果有人对我有更好的参考,我会很感激他们。
所以基本上我理解连接始于握手。我收到CONNECT
请求,代理授权等。然后我连接到请求的资源URI中指定的主机和端口。然后我发送状态行,理想情况为HTTP/1.1 200 Connection established
,然后是一些标题和正常的CRLF。
握手完成后,我的客户端和客户端要求的主机通过我的代理服务器连接。我应该在两个方向上挖掘数据,这是有道理的,因为我可以通过这个基于HTTP的代理连接支持任何类型的基于TCP的协议,包括HTTPS甚至WebSocket。
对我来说没有意义的是我怎么知道什么时候停下来。如果这个代理可以真正支持任何基于TCP的协议,那么我不明白如何知道交互何时结束。 HTTP消息将是一个简单的2步读写,HTTPS交互将涉及多个此类交换,并且WebSocket交互将涉及无限多次交换。
我不是要求一个完美的解决方案。我会很满意像超时那样务实的东西,但我想知道为了做这个项目我可以做什么标准的最佳实践。
感谢大家的帮助。
答案 0 :(得分:2)
只需同时向两个方向复制数据,直到您读取流的结尾。然后: