http - 实现 HTTP 代理

标签 http protocols rfc http-proxy http-protocols

我想实现 HTTP 代理服务器,以更深入地了解协议(protocol)的一些细节,并在此过程中学习一些套接字编程,但我不想实现一个成熟的 HTTP 服务器。如果我只想实现代理,我应该关注哪些相关的 RFC 页面和这些页面中的部分?

计划是从常规 HTTP 代理开始,然后可能将其扩展到 HTTPS 代理。

最佳答案

我目前也在努力。基本实现很简单。监听套接字端口,找到主机,连接到远程服务器,发送 http header ,从服务器接收,然后发回客户端。困难的部分是一致的连接和流水线。

对于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

关于http - 实现 HTTP 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876883/

相关文章:

email - 为什么 CR 和 LF 在电子邮件中一起出现如此重要?

java - JAIN-SIP 对 RFC 7339 的支持

http - 这是一个格式正确的多部分/表单数据请求吗?

ruby - 使用 ruby​​ 的异步 HTTP 请求

swift - 获取声明为协议(protocol)的属性时调用 didSet

protocols - python dpkt pcap 如何获取协议(protocol)?

macos - 在 OSX 上使用 VLC 打开链接

swift - 与 Vapor 客户端作斗争

java - 带有需要枚举参数的注释的 clojure gen-class

sockets - FTP 主动模式和多​​路复用