我想实现 HTTP 代理服务器,以更深入地了解协议的一些细节,并在此过程中学习一些套接字编程,但我不想实现一个成熟的 HTTP 服务器。如果我只想实现代理,我应该关注哪些相关的 RFC 页面和这些页面中的部分?
该计划是从常规 HTTP 代理开始,然后可能将其扩展到 HTTPS 代理。
我想实现 HTTP 代理服务器,以更深入地了解协议的一些细节,并在此过程中学习一些套接字编程,但我不想实现一个成熟的 HTTP 服务器。如果我只想实现代理,我应该关注哪些相关的 RFC 页面和这些页面中的部分?
该计划是从常规 HTTP 代理开始,然后可能将其扩展到 HTTPS 代理。
我会看看HTTP 1.0 (RFC 1945)和HTTP 1.1 (RFC 2616)。你也可以看看:
您可以通过 Google 找到很多示例代码!
我目前也在努力。基本实现很简单。侦听套接字端口,找到主机,连接到远程服务器,发送 http 头,从服务器接收,然后发送回客户端。困难的部分是一致的连接和流水线。
至于 HTTPs,它的 header 是这样的:
CONNECT addons.mozilla.org:443 HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0
Host: addons.mozilla.org
代理应该连接到服务器,然后向客户端回复 200 消息,然后作为重定向器来回重定向。
检查这个:https ://datatracker.ietf.org/doc/html/draft-luotonen-ssl-tunneling-03
您可能还会发现 IETF 中 HTTPbis 小组的工作很有帮助;我们正在重新编写规范,以使它们更加清晰和易于实施。
有关详细信息,请参阅 http://trac.tools.ietf.org/wg/httpbis/trac/wiki 。