高级前端http【Q081】http proxy 的原理是什么

http proxy 的原理是什么

更多描述 如 webpack-dev-server 可以设置 proxy,nginx 也可以设置

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 82

Author 回答者: shfshanyue

todo

Author 回答者: Merlin218

HTTP代理的原理

代理服务器会自动提取请求数据包中的HTTP请求数据发送给服务端,并服务端的HTTP响应数据转发给发送请求的客户端,HTTP代理服务器使用的端口通常是8080。

  • 对于Web客户端来说,代理扮演的服务器角色,接收请求(Request),返回响应(Response)。
  • 对于Web服务器来说,代理扮演的客户端角色,发送请求(Request),接收响应(Response)。

HTTP 代理步骤

  • 客户端代理发起TCP连接
  • 代理接收客户端的连接,双方建立连接
  • 客户端代理发送HTTP请求,请求内容和没有HTTP代理的内容完全相同;
  • 代理解析HTTP请求
  • 代理服务器发起TCP连接
  • 服务器接收代理的连接;
  • 代理服务器发送HTTP请求(这个HTTP请求是基于用户的HTTP请求,可能会有修改
  • 服务器发送响应代理
  • 代理发送响应给发送请求的客户端

不同HTTP代理的区别:

  • 全匿名代理,不改变客户端的request fields(请求信息),使服务器端看来就像有个真正的客户浏览器在访问。客户端的真实IP是隐藏起来的。
  • 普通匿名代理,能隐藏客户端的真实IP,但会更改客户端的request fields(请求信息),服务器端有可能会被认为使用了代理。
  • 透明代理(简单代理),改变客户端的request fields(请求信息),并会传送真实IP地址。

HTTPS代理

HTTPS代理有多种做法,通常使用CONNECT method,通过proxy建立一条隧道(隧道代理),这样,proxy无法解密数据;此外,还有一种类似于中间人攻击的代理手法。

CONNECT方法代理步骤

  • 客户端代理发起CONNECT请求;
  • 代理服务端发起TCP连接请求;
  • 当TCP连接建立完成后, 代理客户端返回HTTP/1.0 OK,隧道建立完成;
  • 代理转发客户端的数据给服务器,转发服务器的数据给客户端,直到任何一方连接结束;

内容参考HTTP、HTTPS代理分析及原理