讲每个人都能听懂的“HTTP代理”
在学习爬虫的路上了解到了「HTTP代理」这一关键词,脑海中产生了疑问:
- HTTP代理到底是个啥?
- 爬虫为什么需要用到HTTP代理?
我为了更好更系统的掌握爬虫技术,所以针对HTTP代理进行了初步的学习,并撰写了该文章来介绍“HTTP代理”
HTTP代理不光是每个技术人员需要掌握的知识,我觉得在互联网盛行的当下,也是每个人必备的知识。
我们首先通过描述电影中的一些情节来刻画HTTP代理的原理。
我们经常在一些警匪犯罪片中会看到一些“军火贩卖”的勾当。军火贩卖的过程通常需要三个角色:一个是购枪者、一个是出面代买者(通常会找一些小弟,或者中介)、另一个就是提供军火的卖家。
说完角色后,我们先说说为什么“军火贩卖”需要第三者的介入。犯罪分子在买枪通常都是做一些犯法的事情,他通常都会隐藏自己身份,以免暴露自己的犯罪行径。另外也担心警察会伪装成“军火商”,进行钓鱼执法让自己显形导致被抓。
同理,HTTP代理就像上述“军火贩卖”的交易一样,在介绍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代理,请尽情期待我的下一篇文章。