注意: IP代理精灵仅提供国内ip网络节点,不提供境外网络节点,不能用于任何非法用途或访问境外封闭网站,不能跨境联网,只能用于合法的国内网络加速。

请登录 注册

首页 > 新闻资讯 > 浅谈HTTP的代理服务和HTTP协议

浅谈HTTP的代理服务和HTTP协议

来源:IP代理精灵 作者:admin 时间:2019-10-12 14:42:19

  浅谈HTTP的代理服务和HTTP协议!在互联网环境下,引入HTTP代理后,原来简单的双方通信就变复杂了一些,加入了一个或者多个中间人,但整体上来看,还是一个有顺序关系的链条,而且链条里相邻的两个角色仍然是简单的一对一通信,不会出现越级的情况。

浅谈HTTP的代理服务和HTTP协议

  链条的起点还是客户端(也就是浏览器),中间的角色被称为代理服务器(proxy server),链条的终点被称为源服务器(origin server),意思是数据的“源头”“起源”。

  1.代理服务

  “代理”这个词听起来好像很神秘,有点“高大上”的感觉。

  但其实HTTP协议里对它并没有什么特别的描述,它就是在客户端和服务器原本的通信链路中插入的一个中间环节,也是一台服务器,但提供的是“代理服务”。

  所谓的“代理服务”就是指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份:面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器时,又表现为客户端,代表客户端发送请求。

  代理有很多的种类,例如匿名代理、透明代理、正向代理和反向代理。

  这里研究最常见的反向代理,它在传输链路中更靠近源服务器,为源服务器提供代理服务。

  2.代理的作用

  为什么要有代理呢?换句话说,代理能干什么、带来什么好处呢?

  你也许听过这样一句至理名言:“计算机科学领域里的任何问题,都可以通过引入一个中间层来解决”(在这句话后面还可以再加上一句“如果一个中间层解决不了问题,那就再加一个中间层”)。TCP/IP协议栈是这样,而代理也是这样。

  由于代理处在HTTP通信过程的中间位置,相应地就对上屏蔽了真实客户端,对下屏蔽了真实服务器,简单的说就是“欺上瞒下”。在这个中间层的“小天地”里就可以做很多的事情,为HTTP协议增加更多的灵活性,实现客户端和服务器的“双赢”。

  代理最基本的一个功能是负载均衡。因为在面向客户端时屏蔽了源服务器,客户端看到的只是代理服务器,源服务器究竟有多少台、是哪些IP地址都不知道。于是代理服务器就可以掌握请求分发的“大权”,决定由后面的哪台服务器来响应请求。

  代理中常用的负载均衡算法你应该也有所耳闻吧,比如轮询、一致性哈希等等,这些算法的目标都是尽量把外部的流量合理地分散到多台源服务器,提高系统的整体资源利用率和性能。

  在负载均衡的同时,代理服务还可以执行更多的功能,比如:

  健康检查:使用“心跳”等机制监控后端服务器,发现有故障就及时“踢出”集群,保证服务高可用;

  安全防护:保护被代理的后端服务器,限制IP地址或流量,抵御网络攻击和过载;

  加密卸载:对外网使用SSL/TLS加密通信认证,而在安全的内网不加密,消除加解密成本;

  数据过滤:拦截上下行的数据,任意指定策略修改请求或者响应;

  内容缓存:暂存、复用服务器响应。

  3.代理相关头字段

  代理的好处很多,但因为它“欺上瞒下”的特点,隐藏了真实客户端和服务器,如果双方想要获得这些“丢失”的原始信息,该怎么办呢?

  首先,代理服务器需要用字段“Via”标明代理的身份。

  Via是一个通用字段,请求头或响应头里都可以出现。每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾,就像是经手人盖了一个章。

  如果通信链路中有很多中间代理,就会在Via里形成一个链表,这样就可以知道报文究竟走过了多少个环节才到达了目的地。

  例如下图中有两个代理:proxy1和proxy2,客户端发送请求会经过这两个代理,依次添加就是“Via: proxy1, proxy2”,等到服务器返回响应报文的时候就要反过来走,头字段就是“Via: proxy2, proxy1”。

  Via字段只解决了客户端和源服务器判断是否存在代理的问题,还不能知道对方的真实信息。

  但服务器的IP地址应该是保密的,关系到企业的内网安全,所以一般不会让客户端知道。不过反过来,通常服务器需要知道客户端的真实IP地址,方便做访问控制、用户画像、统计分析。

  可惜的是HTTP标准里并没有为此定义头字段,但已经出现了很多“事实上的标准”,最常用的两个头字段是“X-Forwarded-For”和“X-Real-IP”。

  “X-Forwarded-For”的字面意思是“为谁而转发”,形式上和“Via”差不多,也是每经过一个代理节点就会在字段里追加一个信息。但“Via”追加的是代理主机名(或者域名),而“X-Forwarded-For”追加的是请求方的IP地址。所以,在字段里最左边的IP地址就客户端的地址。

  “X-Real-IP”是另一种获取客户端真实IP的手段,它的作用很简单,就是记录客户端IP地址,没有中间的代理信息,相当于是“X-Forwarded-For”的简化版。如果客户端和源服务器之间只有一个代理,那么这两个字段的值就是相同的。

  我们的实验环境实现了一个反向代理,访问“http://www.chrono.com/21-1”,它会转而访问“http://origin.io”。这里的“origin.io”就是源站,它会在响应报文里输出“Via”“X-Forwarded-For”等代理头字段信息:

  单从浏览器的页面上很难看出代理做了哪些工作,因为代理的转发都在后台不可见,所以我把这个过程用Wireshark抓了一个包:

  从抓包里就可以清晰地看出代理与客户端、源服务器的通信过程:

  step1. 客户端55061先用三次握手连接到代理的80端口,然后发送GET请求;

  step2. 代理不直接生产内容,所以就代表客户端,用55063端口连接到源服务器,也是三次握手;

  step3. 代理成功连接源服务器后,发出了一个HTTP/1.0 的GET请求;

  step4. 因为HTTP/1.0默认是短连接,所以源服务器发送响应报文后立即用四次挥手关闭连接;

  step5. 代理拿到响应报文后再发回给客户端,完成了一次代理服务。

  在这个实验中,你可以看到除了“X-Forwarded-For”和“X-Real-IP”,还出现了两个字段:“X-Forwarded-Host”和“X-Forwarded-Proto”,它们的作用与“X-Real-IP”类似,只记录客户端的信息,分别是客户端请求的原始域名和原始协议名。

  4.代理协议

  有了“X-Forwarded-For”等头字段,源服务器就可以拿到准确的客户端信息了。但对于代理服务器来说它并不是一个最佳的解决方案。

  因为通过“X-Forwarded-For”操作代理信息必须要解析HTTP报文头,这对于代理来说成本比较高,原本只需要简单地转发消息就好,而现在却必须要费力解析数据再修改数据,会降低代理的转发性能。

浅谈HTTP的代理服务和HTTP协议

  另一个问题是“X-Forwarded-For”等头必须要修改原始报文,而有些情况下是不允许甚至不可能的(比如使用HTTPS通信被加密)。

  所以就出现了一个专门的“代理协议”(The PROXY protocol),它由知名的代理软件HAProxy所定义,也是一个“事实标准”,被广泛采用(注意并不是RFC)。

  “代理协议”有v1和v2两个版本,v1和HTTP差不多,也是明文,而v2是二进制格式。今天只介绍比较好理解的v1,它在HTTP报文前增加了一行ASCII码文本,相当于又多了一个头。

  这一行文本其实非常简单,开头必须是“PROXY”五个大写字母,然后是“TCP4”或者“TCP6”,表示客户端的IP地址类型,再后面是请求方地址、应答方地址、请求方端口号、应答方端口号,最后用一个回车换行(\r\n)结束。

  例如下面的这个例子,在GET请求行前多出了PROXY信息行,客户端的真实IP地址是“1.1.1.1”,端口号是55555。

  PROXY TCP4 1.1.1.1 2.2.2.2 55555 80\r\n

  GET / HTTP/1.1\r\n

  Host: www.xxx.com\r\n

  \r\n

  服务器看到这样的报文,只要解析第一行就可以拿到客户端地址,不需要再去理会后面的HTTP数据,省了很多事情。

  不过代理协议并不支持“X-Forwarded-For”的链式地址形式,所以拿到客户端地址后再如何处理就需要代理服务器与后端自行约定。

  小结

  1)HTTP代理就是客户端和服务器通信链路中的一个中间环节,为两端提供“代理服务”;

  2)代理处于中间层,为HTTP处理增加了更多的灵活性,可以实现负载均衡、安全防护、数据过滤等功能;

  3)代理服务器需要使用字段“Via”标记自己的身份,多个代理会形成一个列表;

  4)如果想要知道客户端的真实IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP”;推荐阅读:HTTP代理是什么

  5)专门的“代理协议”可以在不改动原始报文的情况下传递客户端的真实IP。

  以上就是HTTP的代理服务和HTTP协议的相关内容介绍,以上内容,仅供参考!


最新资讯

推荐阅读

  1. 11

    2019-09

    http代理使用模式。

    http代理使用模式。近几年互联网发展迅速,各个行业的发展也呈逐步上升趋势,而电子商务行业尤为迅速。大数据时代来临,爬虫行业迎来高速发展,http代理的作用也日益重要。近几年来,各

  2. 05

    2021-03

    IP代理与其它代理的区别

    IP代理与其它代理的区别?很多朋友都听过IP代理,那么它和其它代理区别在哪里?它们之间有什么必然联系吗?说到代理它的范围就比较广泛,ip代理其实也是代理的一种,ip加速器是通过IP服务器

  3. 28

    2019-04

    网站更换IP和空间会影响seo关键词的排名吗?

    做网络的通常都会讨论一个问题,网站更换服务器IP地址对排名有没有影响?简单的说,其实你只要是不频繁的更换,影响也不会很大的。那么对关键词的排名呢?那么还有一个问题,对关键词

  4. 09

    2019-05

    http代理ip选择的重点是什么

    作为一个首先发展起来的代理ip,http代理ip在网络上的应用是最多的,针对其提供的代理ip服务也是很多的,但是这也为用户选择http代理ip服务增加了难度,如果不是对http代理ip服务非常熟悉和

  5. 16

    2019-04

    选择http代理需要注意什么问题

    在日常生活中,我们平时上网可能会很少用到http代理​IP,但在从事爬虫作中,用到http代理IP的机会就比较多了。http代理确实给我们的工作带来很多便利,也正因为如此,市面上的代理IP越来越

  6. 19

    2021-07

    浅析网络爬虫使用高质量代理IP的原因

    浅析网络爬虫使用高质量代理IP的原因!网络爬虫的主要功能是抓取互联网上公开的网页信息,为大数据提供数据支撑。网络爬虫的日常工作量一般比较大,毕竟是“大”数据。因此,网络爬虫