认识
HTTP 代理是一种位于客户端和目标服务器之间的中间服务器,它充当两者之间的中介,转发客户端的 HTTP 请求并返回服务器的响应。HTTP代理是网络架构中重要的组成部分,在安全、隐私和性能优化方面发挥着关键作用。
组成
Client ⇒ Proxy Server ⇒ Destination Server
报文格式
在 IP 和 TCP 中,DST IP Address 为 Proxy Server 地址,DST Port Number 为 Proxy Server 端口。
在 HTTP 中,报文也存在差异:
- REQUEST URI 为完整地址;
- 存在多个与 Proxy 相关的头部,例如 Proxy-Connection、X-Forwarded-For、……
GET http://www.baidu.com/ HTTP/1.1 Host: www.baidu.com Proxy-Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 DNT: 1 Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8
交互原理
- 客户端配置代理服务器地址和端口
- 客户端发送请求到代理服务器
- 代理服务器解析请求并转发到目标服务器
- 目标服务器响应代理服务器
- 代理服务器将响应返回给客户端
在 HTTP Proxy 中,DNS 解析发生在代理服务器。
构建
– Squid
– Nginx (可作为反向代理)
– Apache (mod_proxy)
– TinyProxy
– CCProxy (Windows平台)
性质
- 请求转发:接收客户端请求并转发给目标服务器
- 响应返回:接收服务器响应并返回给客户端
- 缓存功能:可缓存常用资源以减少带宽使用和提高响应速度
- 内容过滤:可过滤特定内容或网站
- 访问控制:可限制或允许特定用户/设备的访问
- 日志记录:记录用户访问信息
## 类型分类
### 按匿名程度分类
– 透明代理:不隐藏客户端IP,服务器知道请求经过代理
– 匿名代理:隐藏客户端IP但会表明是代理访问
– 高匿代理:完全隐藏代理特征,服务器无法检测
### 按协议支持分类
– HTTP代理:仅支持HTTP协议
– HTTPS代理:支持加密的HTTPS连接
– SOCKS代理:支持多种协议,不限于HTTP
应用
- 企业网络管理:控制员工上网行为
- 突破网络限制:访问被封锁的网站
- 网络加速:通过缓存提高访问速度
- 隐私保护:隐藏真实IP地址
- 网络爬虫:防止IP被封锁
- 负载均衡:分发网络请求
参考
At a Glance: HTTP Proxy Packets vs. Normal HTTP Packets
How does a HTTP Proxy utilize the HTTP protocol? a Proxy RFC?