<<Otto's BLog

代理服务器的新轮子:anyproxy

是的,我们又写了一个代理服务器,基于Node.js,取名 anyproxy项目主页)。

anyproxy

业界的代理工具已经不少了,windows有fiddler,mac有charles,跨平台的有腾讯alloy team出品的liver pool。满足特定功能的民间产品更是层出不穷,如代理线上combo文件的flex-combo,clam中的doji等等。

如此之多的产品,仍无法满足前端攻城师们奇葩的需求。举几个调试场景的栗子:

anyproxy的诞生,就是为了提供一个大底层,让类似的工具不再遥远,分分钟提升我们的调试效率。

代理服务器的战略价值

代理服务器是个中间人,站在了客户端和服务端中间,双方通信的每个比特,都会滴水不漏地经过它。 从http协议的角度来看,它控制了完整的请求头、请求体、响应头、响应体,可以在客户端与服务端都无感知的情况下介入处理所有的流程,是通信过程中的战略要塞。

AnyProxy的开放式代理服务器设计

可编程的API接口(rule)

面对纷繁的调试需求,传统的“配置文件”遭遇了灵活性瓶颈,因此我们决定开放接口,由攻城师们自己来编写各类代理规则。

类似obj-c中的delegate机制,我们把http请求的每个过程都进行分拆,用户可以根据需求对网络请求的任一环节进行干预。在这里,用户编写的规则文件被称为 rule

接口流程

具体来说,我们允许用户干预的接口:

清晰易懂的图解

右侧加粗气泡里即是anyproxy的接口。

实践和sample

为了帮助你更快地编写规则(rule)文件,我们提供了些sample(点击访问):

界面

可视化查看流量的利器。界面中的数据通信用websocket完成,保证了传输的实时性。

Https的中间人(man-in-the-middle)代理

Charles和fiddler有https的代理,可以做https的明文解码,anyProxy也做到了。

配合openSSL,制作一个根证书并在宿主机信任,anyproxy可以实时签发任意域名的二级证书,来协助https明文代理。

其他特性

跃跃欲试?

<<Otto's BLog