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协议设计之初,就已经被大佬们考虑在内了。

在HTTP代理的类型中,我们实现了哪种代理?

我们实现了代理(Proxy)和隧道(Tunnel)。
其中,代理(Proxy)用来实现HTTP协议转发,隧道(Tunnel)用来实现HTTPS协议的转发。
为什么需要有两种方式转发HTTP协议和HTTPS协议?
我们将会在未来的文章(HTTP代理的安全性问题)中详细说明。
封面图

结论

在这篇文章中,我们详细解释了为什么需要使用HTTP代理的原因、什么是HTTP代理和HTTP代理的工作原理。在1997年定义的HTTP代理协议,截止到2022年,仍然是最流行的IP地址隐藏方式,因为它在设计之初就已经考虑得十分周全,它还将继续在爬虫系统中扮演重要角色。
最后说一下队友写的2808Proxy使用Golang实现了完整的HTTP代理协议,在我们的实际测试中,它可以在带宽允许的情况下稳定地实现单机百万并发,为爬虫系统提供了坚实保障。