美文网首页
基于Netty的HTTP代理

基于Netty的HTTP代理

作者: 新签名 | 来源:发表于2019-07-16 10:32 被阅读0次

HTTP代理协议

HTTP代理分为两种模式:HTTP模式、隧道(TUNNEL)模式。

HTTP模式

客户端会将代理服务器当成目标服务器,发送HTTP请求;代理服务器接收到客户端直传的HTTP请求后,解析HTTP报文请求中的URL,建立与目标服务端的连接,并将请求报文转发至目标服务器,同时将目标服务器返回的响应报文返回给客户端。

|-- 客户端 ---|       |------------------- 代理端 --------------------------|      |------ 目标服务器 -------|
     
 -------------         -----------           --------         ------------         ----------------------
| http请求报文 |------>|  解析请求头 |--------| 建立连接 |------|  转发请求报文 |------|  处理并产生HTTP相应报文 |
 -------------         -----------           --------         ------------         ----------------------
                                                                                              |
                                                                                              | 产生
                                                                                              |
 -------------           -------------------------------------------------         ----------------------
| 接受到响应报文 |<-------|              转发响应报文给客户端                  |------ |       响应报文        |
 -------------           -------------------------------------------------         ----------------------

隧道(TUNNEL)模式

HTTP 模式很好的解决了大部分场景,但是解决不了HTTPS密文传输问题,代理服务器没有服务端密钥,无法模拟目标服务端对客户端进行HTTPS握手,更不能代替目标服务端响应客户端请求。

HTTP 1.1协议的CONNECT方法提供了一个解决思路,CONNECT方法给予一个目标地址,要求代理服务器建立一条到目标地址的隧道,之后的SSL握手和接下来的数据交换将在隧道中进行,传输的流量完全加密,代理服务器无法监控。


|--- 客户端 ---|       |------------------- 代理端 --------------------------|      |------ 目标服务器 -------|
    
-------------        -----------           --------  
| http请求报文 |----->|  解析请求头 |--------| 建立连接 |
-------------        -----------           --------  
                                               |                                                 
-------------                                  |            
|   200 Ok    |<--------------------------------
------------- 

 -------------         -----------------------------------------------------         ----------------------
|   请求字节   |------>|                       盲转流量                       |------>|     处理并返回数据     |
-------------         -----------------------------------------------------         ----------------------
                                                                                              |
                                                                                              | 产生
                                                                                              |
 -------------         -----------------------------------------------------         ----------------------
|   响应字节   |<------|                       盲转响应                       |<------|       响应字节        |
-------------         -----------------------------------------------------         ---------------------- 

基于Netty的HTTP代理

根据以上协议内容,编写了一个基于NettyHTTP代理服务。

项目地址:https://github.com/zk-123/http-proxy

release 下有现成的jar可用。

由于项目简单,这里不在详细讲解,仅放置设计图:

HTTP模式设计图

HTTP模式设计图

隧道模式(TUNNEL)设计图

隧道模式(TUNNEL)设计图

最后

拥有代理能力就打开了一个不可思议的大门,这里讲解仅仅是一个比较基础的思路,后续可能会发现许多意向不到的神奇操作。

相关文章

网友评论

      本文标题:基于Netty的HTTP代理

      本文链接:https://www.haomeiwen.com/subject/kxkafctx.html