我想实现和HTTP代理服务器,以更深入地了解协议的一些细节,并在此过程中学习一些套接字编程,但我不想实现一个成熟的HTTP服务器。如果我只想实现代理,我应该关注哪些相关的 RFC 页面和这些页面中的部分?
该计划是从常规HTTP代理开始,然后可能将其扩展到HTTPS代理。
您可能还会发现 IETF 中 HTTPbis 组的工作很有帮助;我们正在重写规范,以使它们更清晰、更易于实现。
看 http://trac.tools.ietf.org/wg/httpbis/trac/wiki了解更多信息。
我目前正在研究它。基本实现很简单。侦听套接字端口,找到主机,连接到远程服务器,发送 http 标头,从服务器接收,然后发送回客户端。困难的部分是一致的连接和流水线。
至于HTTP,它的标头是这样的:
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
1945)和HTTP 1.1(RFC 2616)。您还可以查看:
- RFC 822 - 互联网文本消息的结构,包括标头字段
- RFC 2396 - URL/URI 语法的定义(取代 RFC 1738 和 RFC 1808)
- RFC 1521 - MIME 和 MIME 类型的定义
您可能可以在Google上找到很多示例代码!