讲每个人都能听懂的“HTTP代理”

学习网络爬虫往往会牵扯到方方面面的知识点,这次在学习的道路上“杀出的陈咬金”就是—「HTTP代理」,让不由自主的产生了一些疑问:

HTTP代理到底是个啥?爬虫为什么需要用到HTTP代理?

为了让我在学习爬虫的道路上一马平川,因此我在网上阅读大量的网络知识,整理出了一篇通俗易懂、系统全面的“HTTP代理”文章。

我觉得「HTTP代理」不光是每个技术人员需要掌握的知识,我觉得在互联网盛行的当下,也是每个人必备的基础知识。

我们首先通过电影中的一个经典情节来刻画HTTP代理的原理。

我们经常在一些警匪犯罪片中会看到一些“军火贩卖”的勾当。军火贩卖的过程通常需要三个角色:一个是购枪者、一个是出面代买者(通常会找一些小弟,或者中介)、另一个就是提供军火的卖家。

有些朋友就会好奇,为什么购买军火需要一名“出面代买者”,这是因为犯罪分子买枪通常都是做一些犯法的事情,他们通常都需要隐藏自己身份,以免暴露自己的犯罪行径。另外一点,担心警察会伪装成“军火商”,进行钓鱼执法让自己显形导致被抓。

同理,HTTP代理就类似于上述“军火贩卖”的交易形式一样,下面我通过以下五个主题为你系统全面的介绍“HTTP代理”知识:

HTTP的传输过程代理传输过程HTTP代理的特点与HTTPS的冲突正反代理

一、HTTP的传输过程

在介绍HTTP代理我们先简单理解下HTTP的传输过程,HTTP从字义上说就是超文本传输协议。

通俗的理解:就像各个国家在国际论坛上都约定好说要讲“英语”一样,是约定好要表达某种特定信息格式的一种协议。

作为普通用户访问一个网页,通常会通过URL链接直接输入在浏览器中回车进行访问。这个动作的背后实际上,就是客户端(浏览器)和服务器之间的通信。

不管是浏览网页展示的信息,还是点击某个操作,实际上都是客户端(浏览器)向服务器发送了一个“请求”,服务器接收到客户端发送的请求后会解析请求中的数据并处理。

然后针对对应的“请求”(播放视频或某个按钮)返回与之对应的数据结果返回给客户端(这里所说的客户端通常是我们的浏览器),浏览器接收到服务器返回的数据后,会将返回数据进行渲染,将请求的结果以结构化美观的形式呈现在用户面前。

请求和响应

请求从客户的角度来说,它可能是“向访问一个网页”、“播放某个视频”,从技术层面来说指的是浏览器需要向服务器获取某些资源,或执行某些命令处理数据。

响应从客户的角度来说,它可能是“打开新的网页加载展示了可视化的内容”、“进行某个视频或者音频的播放”等等,从技术层面来说指的是服务器传输某种数据格式,通过网络结合HTTP协议向客户端(浏览器)发送,客户端通过自身的技术手段将数据直观的展示出来。

二、代理传输过程

有了对HTTP的传输过程的初步的认识,我们在此基础上再来介绍HTTP代理传输过程。

HTTP代理传输过程其实就是在HTTP的传输过程中加入了一个“中介”,即代理服务器,就像上面军火贩卖情节中“出面代买枪械的人”,而客户端就像“购枪者”花钱买枪,服务器就像“军火商”根据不同的需求和价钱给予不同的枪械。

在客户端设置了HTTP代理服务器,那么所有的HTTP请求就会首先发送到代理服务器上,代理服务器自动提取客户端发送给他的请求数据包。

随后,代理就“相当于一个客户端”将请求数据发送给服务器,在服务器处理请求后再将返回的数据先给代理,再由代理转发给客户端。

三、HTTP代理的特点

中介

我们可以将代理简单的理解,它相当于在数据传输的过程中当了“中介”的角色,这也跟我们现实生活中“跑腿”、“外卖”的场景类似。

这个“中介”,相对于客户端来说,它代理了发送请求的工作,并为客户端带来服务器给它的数据。

这个“中介”,相对于服务器来说,它代理了返回数据的工作,并为服务器提供由客户端提交的请求数据。

隐身

在请求与响应的传输数据过程中,如果代理服务器不主动向服务器透露客户端的IP信息,并且不改变客户端发来的请求信息,那么从服务端的角度来看一直都是代理服务器在向它请求数据,完全察觉不到真实客户端的存在。

我们把这种有着“隐身”意味的代理称为「全匿名代理」

用于网络爬虫

使用爬虫技术一般会有一个代理池,其实就是利用很多不同的代理服务器去对目标网站(服务器)进行数据爬取,这样的作用:可以防止单个IP访问(爬取)评率过高被网站(服务器)封杀。

这部分也是我找到的答案,真是“一语道破万千愁”

四、与HTTPS的冲突

HTTPS

目前越来越多的网站已经不是采用单纯的HTTP协议了,而是在HTTP的基础上加入了安全层SSL,即HTTPS。HTTPS的主要作用:提供对网站服务器的身份认证机制,保护交换数据的隐私与完整性。

冲突

暂且不深入理解HTTPS的加密原理,如果要深入理解HTTPS可以自行查询资料扩展,也可以访问我写文章《HTTPS原理》。我们可以先简单的理解为HTTPS的传输需要提前和服务器约定好某种“暗号”,通过这个“暗号”服务器才愿意进行数据交互。

其中的安全处理机制,却影响到了我们刚刚谈的代理服务器进行“中介”事物的处理(转发请求和处理响应),这是为什么呢?

因为,如果客户端和服务器还是按照原来规则:通过代理服务器做“简单的转发处理形式”。那么服务器对于这个“半路杀出的程咬金” 并不认识也不买账的,代理服务器既没有和服务器认证好的“暗号”,也没有提前做过某些约定,服务器是不会将信息信任的给到一个陌生人(代理服务器),从而导致整个代理传输过程也无法进行。

解决方式

通过一个特殊的请求方法“Connect”,它是HTTP中的一种请求方法。

在介绍通过Connect方法解决冲突的原理之前,我们还是先通过通俗点的比方来理一下。

这个冲突就好像:你朋友说会在某天亲自给你送一件东西,但是到了那天送东西的人却不是你朋友,那你肯定会产生忧虑不会接受陌生人送的东西,可能箱子里面会是一条蛇也说不定。

后来经过朋友解释后,才知道陌生人是快递员,但是还是为了谨慎,你要求快递员在送货之前要发送自己的身份信息和描述送货的详细信息,以此作为认证手段。

Connect方法就像:“提前告诉对方他是此次送货的快递员”,Connect方法作用让客户端和服务器之间建立了双方信任的通道。

那么解决冲突的详细方法描述是:客户端在服务器发送数据之前,通知代理服务器向服务器发起Connect请求,以便建立代理服务器和服务端之间的信任连接,然后此时代理服务器就可以恢复“中介”的身份进行数据的转发。

这其中的意会,有点像张艺谋导演的电影《影子》,你会躲在隐秘的背后,找一个和你一模一样能代替的“影子”,而外人以为“影子”就是真实的你。

五、结尾-正反代理

正向代理是代表客户端向服务器发起请求,反向代理是代表服务器向客户端返回数据。

一句话:正向代理隐藏真实客户端,反向代理隐藏真实服务端。

代理不光可以进行“隐身”,作为用户我们在上网时设置代理服务器,可以访问原来无法访问的资源,可以做缓存加速访问资源。

本文致力于讲让每个人都能理解的“HTTP代理”,让大家能够对HTTP代理的认识和作用进行快速的了解,如果想要深入探究更多的原理或者关于如何实战使用HTTP代理,请尽情期待我的下一篇文章。