-
Notifications
You must be signed in to change notification settings - Fork 5
Home
zk-123 edited this page Dec 4, 2019
·
1 revision
HTTP代理协议
HTTP代理就是解析请求过来的HTTP报文,与目标地址建立连接,将客户端的请求报文转发给目标地址,并将目标地址返回的报文转发给客户端。
但是HTTPS是经过公钥加密过的字节流,代理解析到的是乱码,所以不能采用传统的解析转发的方式去代理,除非获取服务器上的私钥,否则整个回话过程将被加密。
HTTP 1.1协议的CONNECT方法解决了这个问题,CONNECT方法给予一个目标地址,要求代理服务器建立一条到目标地址的隧道,之后的TSL认证和数据交换将在隧道中进行。
|-- 客户端 ---| |------------------- 代理端 --------------------------| |------ 目标服务器 -------|
------------- ----------- -------- ------------ ----------------------
| http请求报文 |------>| 解析请求头 |--------| 建立连接 |------| 转发请求报文 |------| 处理并产生HTTP相应报文 |
------------- ----------- -------- ------------ ----------------------
|
| 产生
|
------------- ------------------------------------------------- ----------------------
| 接受到响应报文 |<-------| 转发响应报文给客户端 |------ | 响应报文 |
------------- ------------------------------------------------- ----------------------
|--- 客户端 ---| |------------------- 代理端 --------------------------| |------ 目标服务器 -------|
------------- ----------- --------
| http请求报文 |----->| 解析请求头 |--------| 建立连接 |
------------- ----------- --------
|
------------- |
| 200 Ok |<--------------------------------
-------------
------------- ----------------------------------------------------- ----------------------
| 请求字节 |------>| 盲转请求 |------>| 处理并返回数据 |
------------- ----------------------------------------------------- ----------------------
|
| 产生
|
------------- ----------------------------------------------------- ----------------------
| 响应字节 |<------| 盲转响应 |<------| 响应字节 |
------------- ----------------------------------------------------- ----------------------
HTTP代理服务端是基于这两种代理方式进行实现的。