链条的起点还是客户端(也就是浏览器),
中间的角色被称为代理服务器(proxy server),
链条的终点被称为源服务器(origin server)
“代理服务”就是指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份:面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器时,又表现为客户端,代表客户端发送请求。
“计算机科学领域里的任何问题,都可以通过引入一个中间层来解决。如果一个中间层解决不了问题,那就再加一个中间层。”
代理最基本的一个功能是负载均衡。因为在面向客户端时屏蔽了源服务器,客户端看到的只是代理服务器,源服务器究竟有多少台、是哪些 IP 地址都不知道。于是代理服务器就可以掌握请求分发的“大权”,决定由后面的哪台服务器来响应请求。
负载均衡的同时,代理服务还可以执行更多的功能:
健康检查:使用“心跳”等机制监控后端服务器,发现有故障就及时“踢出”集群,保证服务高可用;
安全防护:保护被代理的后端服务器,限制 IP 地址或流量,抵御网络攻击和过载;
加密卸载:对外网使用 SSL/TLS 加密通信认证,而在安全的内网不加密,消除加解密成本;
数据过滤:拦截上下行的数据,任意指定策略修改请求或者响应;
内容缓存:暂存、复用服务器响应
代理服务器需要用字段“Via”标明代理的身份
Via 是一个通用字段,请求头或响应头里都可以出现。每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾。
如果通信链路中有很多中间代理,就会在 Via 里形成一个链表。
服务器的 IP 地址应该是保密的,关系到企业的内网安全,所以一般不会让客户端知道。不过反过来,通常服务器需要知道客户端的真实 IP 地址,方便做访问控制、用户画像、统计分析。
HTTP 标准里并没有为此定义头字段,但已经出现了很多“事实上的标准”,最常用的两个头字段是“X-Forwarded-For”和“X-Real-IP”
“X-Forwarded-For”的字面意思是“为谁而转发”,也是每经过一个代理节点就会在字段里追加一个信息。但“Via”追加的是代理主机名(或者域名),而“X-Forwarded-For”追加的是请求方的 IP 地址。所以,在字段里最左边的 IP 地址就客户端的地址。
X-Real-IP”是另一种获取客户端真实 IP 的手段,记录客户端 IP 地址,没有中间的代理信息。
访问“http://www.chrono.com/21-1”,它会转而访问“http://origin.io”。这里的“origin.io”就是源站,它会在响应报文里输出“Via”“X-Forwarded-For”等代理头字段信息:
代理与客户端、源服务器的通信过程:
1.客户端 55061 先用三次握手连接到代理的 80 端口,然后发送 GET 请求;
2.代理不直接生产内容,所以就代表客户端,用 55063 端口连接到源服务器,也是三次握手;
3.代理成功连接源服务器后,发出了一个 HTTP/1.0 的 GET 请求;
4.因为 HTTP/1.0 默认是短连接,所以源服务器发送响应报文后立即用四次挥手关闭连接;
5.代理拿到响应报文后再发回给客户端,完成了一次代理服务。
在这个实验中,你可以看到除了“X-Forwarded-For”和“X-Real-IP”,还出现了两个字段:“X-Forwarded-Host”和“X-Forwarded-Proto”,它们的作用与“X-Real-IP”类似,只记录客户端的信息,分别是客户端请求的原始域名和原始协议名
代理协议:
“代理协议”(The PROXY protocol),它由知名的代理软件 HAProxy 所定义,也是一个“事实标准”,被广泛采用(注意并不是 RFC)
“代理协议”有 v1 和 v2 两个版本,v1 和 HTTP 差不多,也是明文,而 v2 是二进制格式。
代理会增加链路长度,在代理上做一些复杂的处理。会很耗费性能,增加响应时间。
反向代理中的负载均衡算法:
1.随机
2.轮询
3.一致性hash
4最近最少使用
5.链接最少
以上就是本篇文章【http笔记整理:代理服务】的全部内容了,欢迎阅览 ! 文章地址:http://midet.cs-ej.cn/news/450.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 成事e家移动站 http://hond.cs-ej.cn/ , 查看更多