美文网首页
🐶HTTP的代理服务🐶

🐶HTTP的代理服务🐶

作者: dashingqi | 来源:发表于2022-06-11 16:58 被阅读0次
    Android_Banner.jpg

    简介

    之前介绍HTTP协议的时候,说HTTP协议是属于【请求-应答】的模型,这个模型下只有两个角色【请求方-客户端】和【应答方-服务器】

    该模型下我们可以引入新的角色 - HTTP代理

    引入代理之后整个链路上就不单单有客户端和服务器,之前简单的双方通信就变得复杂了一些;多了个中间人

    代理服务

    所谓的代理就是在客户端和服务器之间的通信链路上插入的一个环节,它本身也是一个服务器,但是提供【代理服务】

    啥是代理服务

    就是说服务本身不产生内容,而是处于中间位置转发上下游的请求和响应,具有双重身份

    对于服务器来说,这个代理服务就是一个客户端,转发客户端的请求;

    但是从客户端的角度看,代理服务也是一个服务器,转发服务器的响应;

    代理的作用

    代理是处在HTTP通信过程的中间位置,对上屏蔽了真实的客户端,对下屏蔽了真实的服务器;

    处于这个中间位置,可以为HTTP协议增加很多的灵活性;如下

    负载均衡

    由于有了代理服务,从客户端角度看屏蔽了源服务器,客户端看到的就是代理服务器,源服务器有多少台,IP地址都是不知道的;

    那么代理服务器处于中间人的位置,就掌握了分发的【权利】,决定由那些服务器来响应请求;

    在代理中常用的负载均衡的算法有【轮询】【一致性哈希】,目的都是把外部的流量合理的分散到多台源服务器上。整体的提高资源的利用率和程序的性能;

    HTTP代理服务-负载均衡.png
    健康检查

    使用【心跳】机制监控后段服务器,发现有故障时就及时从集群中踢出去,保证服务器的高可用

    安全防护

    保护被代理的后端服务器,限制流量,地域一些不合理的网络请求和网络攻击

    加密卸载

    对外网使用SSL/TLS加密的通信认证,在安全的内网下不加密;消除了加解密的成本消耗

    数据过滤

    拦截上下行的数据,任意指定策略去修改请求和响应

    内容缓存

    暂存和服用服务器的响应;

    代理相关的字段

    代理服务器使用【Via】标明代理的身份(主机名)

    【Via】本身是一个通用字段,在请求头和响应头中都可以出现;

    每当经过一个代理节点的时候,代理服务器就会把自身的信息追加到字段的末尾;

    会有这么一个情况,当整个链路上有很多中间代理时,Via的字段会形成一个链表

    Via字段工作示意图
    HTTP代理控制-Via.png

    Via字段的存在代表链路中时存在代理,并不能知道对方的信息;

    比如服务器需要知道客户端真正的IP地址,方便做用户画像、统计分布啊;

    在HTTP协议中并没有给这个点定义头字段;

    但是出现了很多【事实上的标准】常用的头字段【X-Forwarded-For】、【X-Real-IP】

    X-Forwarded-For和X-Real-IP

    X-Forwarded-For

    它的工作形式上和Via很相似,每经过一个代理节点就会在字段里追加一个信息;Via追加的时代理主机名

    而X-Forwarded-For追加的是请求方的IP地址,所以说当源服务器拿到X-Forwared-For字段是,最左侧就是客户端的真实IP地址

    X-Real-Ip

    就是记录客户端真实的IP地址。它不记录任何中间代理的信息;

    代理协议

    【X-Forwarded-For】需要可以记录代理服务器的信息和客户端的IP地址,但是有一个问题就是

    每当报文到达一个代理节点时,就需要解析报文中的头字段,这样的话成本就比较高了;

    原本代理节点就是一个中间转发的能力,现在还去解析并且还要去修改;并且在有些情况不允许甚至不可以的(HTTPS)

    综上所说,就出现了【代理协议】

    代理协议

    是由代理软件公司HAProxy定义的,是一个【事实标准】,被大家伙广泛采用

    它是有两个版本 V1、V2;

    V1类似于HTTP,是明文的;V2是二进制格式

    说下V1

    它就是在HTTP报文前增加一行ASCII码文本

    这个文本开头必须是【PROXY】然后是【TCP4/TCP6】代表客户端IP地址的类型,接着是请求方地址、应答方地址,请求方端口、应答方端口,最后用一个回车换行代表结束;

    HTTP代理协议-格式定义.png

    每当你觉得做这件很困难,压力大的时候,说明就是历练你的时候,这时候不要放弃,坚持下去,硬着头皮也要上;

    最近一个版本,在前期评估需求开发时间时,手中有三个,这时第一次一下手中超过两个需求的情况,当时还是有点压力的;因为这个过程要关乎需求能不能按时交付以及后续这个需求由其他同学开发时,你这边评估时一些重要的点没有有聊到。不管是沟通的经验还是你的拆分能力都是稍微有点考验的;

    相关文章

      网友评论

          本文标题:🐶HTTP的代理服务🐶

          本文链接:https://www.haomeiwen.com/subject/kocwmrtx.html