什么是HTTP代理?[新手教程]
为什么需要使用HTTP代理?
既然你都来到这儿了,相信你肯定是在写爬虫。
如果你所爬的网站不愿意让你采集数据,那么在后端程序员眼中,能够作为判断依据的,都有哪些数据呢?
- IP协议:客户端IP地址、端口号
- HTTP协议:X-Forward-For头、User-Agent头、Referer、URL、URL参数
从某种角度上说,没有什么数据是无法伪造的。但伪造数据是有成本的。爬虫和反爬与其说是在技术上做对抗,不如说是在成本上做对抗。
这些数据哪个伪造成本是最高的? IP地址。
为什么IP地址难以伪造?
首先,对于IP协议层,IP地址是可以伪造的,只需要在发包的时候修改源IP就可以了。
这也是SYN-Flood DDoS攻击时,攻击方经常采取的策略。
可是与UDP协议不同,HTTP协议所依赖的TCP协议是需要双向通信的。
想象一下,你写信填写一个假的发件人地址,对方收到这个信之后,通过你的发件人地址来回信,那么你肯定无法接到回信。
无法建立双向通信, 就无法建立TCP连接,也就无法产生一个有效的HTTP请求。
什么是HTTP代理?
既然IP地址无法伪造,那么我是否可以利用中间人转发的方式隐藏我的真实IP来源?
当然可以。
让我们想象一下,假设你的女朋友因为生气不理你了,拉黑了你的微信,那你怎么向他认错?
你肯定不假思索的说,当然是通过她的闺蜜帮你转达啦。
那在爬虫系统中,HTTP代理所起的作用,和闺蜜的作用是一样的。
它的原理说起来简单的不能再简单:接受你的HTTP请求,再把你的HTTP请求发送出去,那么在被爬网站看来,这个请求不是你发出的,而是代理服务器发出的。
这就好比,你生气的女朋友会拉黑你,但是她不会拉黑她的闺蜜,所以你的信息可以兜兜转转发给你的女朋友,是一样一样的。
HTTP代理的协议是否有标准?
HTTP代理的定义早在HTTP协议设计之初,就已经被大佬们考虑在内了。
根据IETF协会的RFC7230 2.3节,代理的定义有以下三种
- 代理(Proxy)
一种由客户端选择的报文转发代理(message-forwarding agent)。按照一定规则让请求通过同一个中转。
- 网关(Gateway)
又称为反向代理(Reverse Proxy)。对于出站连接来说,网关就像是源服务器。经常被用于拦截不被信任的服务、提高服务器性能、负载均衡等等。
- 隧道(Tunnel)
通常被用于建立一条虚拟的连接。通过这条连接的报文不会发生变化。
- 透明代理(Transparent Proxy)
不是由客户端选择的代理。例如在路由器上建立代理,电脑的浏览器感知不到这个代理。
在HTTP代理的类型中,我们实现了哪种代理?
我们实现了代理(Proxy)和隧道(Tunnel)。
其中,代理(Proxy)用来实现HTTP协议转发,隧道(Tunnel)用来实现HTTPS协议的转发。
为什么需要有两种方式转发HTTP协议和HTTPS协议?
我们将会在未来的文章(HTTP代理的安全性问题)中详细说明。
结论
在这篇文章中,我们详细解释了为什么需要使用HTTP代理的原因、什么是HTTP代理和HTTP代理的工作原理。
在1997年定义的HTTP代理协议,截止到2022年,仍然是最流行的IP地址隐藏方式,因为它在设计之初就已经考虑得十分周全,它还将继续在爬虫系统中扮演重要角色。
最后,欢迎大家使用或推荐2808Proxy,我们使用Golang实现了完整的HTTP代理协议,在我们的实际测试中,它可以在带宽允许的情况下稳定地实现单机百万并发,我们为国内多家知名互联网公司的超大规模爬虫系统提供了坚实保障。欢迎企业用户咨询。