什么是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代理协议,在我们的实际测试中,它可以在带宽允许的情况下稳定地实现单机百万并发,为爬虫系统提供了坚实保障。

你可能感兴趣的:(爬虫,http,网络,网络协议)