透视 HTTP 协议
罗剑锋(Chrono)
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者
63943 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
开篇词 (1讲)
透视 HTTP 协议
15
15
1.0x
00:00/00:00
登录|注册

21 | 良心中间商:HTTP的代理服务

反向代理中使用的负载均衡算法
代理的缺点及避免方法
代理协议
获取客户端真实IP地址
代理服务器标记身份
HTTP代理的作用
PROXY protocol
X-Forwarded-Proto字段
X-Forwarded-Host字段
X-Real-IP字段
X-Forwarded-For字段
Via字段
内容缓存
数据过滤
加密卸载
安全防护
健康检查
负载均衡
具有双重身份
处于中间位置转发上下游的请求和响应
服务本身不生产内容
课下作业
小结
代理协议
代理相关头字段
代理的作用
代理服务
HTTP代理

该思维导图由 AI 生成,仅供参考

在前面讲 HTTP 协议的时候,我们严格遵循了 HTTP 的“请求 - 应答”模型,协议中只有两个互相通信的角色,分别是“请求方”浏览器(客户端)和“应答方”服务器。
今天,我们要在这个模型里引入一个新的角色,那就是HTTP 代理
引入 HTTP 代理后,原来简单的双方通信就变复杂了一些,加入了一个或者多个中间人,但整体上来看,还是一个有顺序关系的链条,而且链条里相邻的两个角色仍然是简单的一对一通信,不会出现越级的情况。
链条的起点还是客户端(也就是浏览器),中间的角色被称为代理服务器(proxy server),链条的终点被称为源服务器(origin server),意思是数据的“源头”“起源”。

代理服务

“代理”这个词听起来好像很神秘,有点“高大上”的感觉。
但其实 HTTP 协议里对它并没有什么特别的描述,它就是在客户端和服务器原本的通信链路中插入的一个中间环节,也是一台服务器,但提供的是“代理服务”。
所谓的“代理服务”就是指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份:面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器时,又表现为客户端,代表客户端发送请求。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

HTTP代理服务就像一个24小时便利店,为HTTP通信引入了一个新的角色——代理服务器。代理服务器处于客户端和源服务器之间,提供代理服务,负责转发请求和响应。代理的作用包括负载均衡、健康检查、安全防护、加密卸载、数据过滤和内容缓存等功能,为HTTP协议增加了灵活性,实现客户端和服务器的双赢。代理相关头字段如Via、X-Forwarded-For和X-Real-IP用于标明代理身份和获取客户端真实IP地址。通过实验环境的抓包分析,可以清晰地看出代理与客户端、源服务器的通信过程。文章介绍了代理的基本概念、作用和相关头字段,为读者快速了解HTTP代理服务提供了全面的概览。 代理协议通过专门的“代理协议”(The PROXY protocol)解决了获取客户端真实IP地址的问题,避免了解析HTTP报文头的成本和修改原始报文的限制。该协议通过在HTTP报文前增加一行ASCII码文本来传递客户端的真实IP地址,提高了代理的转发性能和效率。 总结:HTTP代理服务为通信链路中的中间环节,提供了丰富的功能和灵活性,通过相关头字段和代理协议实现了获取客户端真实IP地址的需求。读者可以通过本文快速了解代理的作用和相关技术特点,为实际应用和进一步学习提供了基础知识。 课下作业:1. 代理的缺点是需要解析HTTP报文头和修改数据,可以通过使用专门的代理协议来避免这些问题。 2. 反向代理中使用的负载均衡算法有轮询、加权轮询、最小连接数等,它们各有优缺点,可以在实际应用中根据需求选择合适的算法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《透视 HTTP 协议》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(51)

  • 最新
  • 精选
  • -W.LI-
    代理会增加链路长度,在代理上做一些复杂的处理。会很耗费性能,增加响应时间。 1.随机 2.轮询 3.一致性hash 4最近最少使用 5.链接最少

    作者回复: great!

    2019-07-15
    4
    57
  • BoyiKia
    老师,我发现前几节课,四次挥手的时候,是客户端主动先发 Fin信号, 今天实验结果,是源服务器,先给代理服务器发的 Fin信号。老师,我有点疑惑哈。到底是谁应该先发。还是说都可以呢。

    作者回复: 这个是tcp协议的知识了,就是谁先断开连接的问题。 其实这个并没有强制要求客户端或者服务器先断开,通常都是客户端主动断开,但服务器也可以主动断开,比如超时、短连接、节约资源等等。 所以结论就是谁都可以,有空可以再补一下tcp的知识。

    2020-05-11
    2
    22
  • Demon
    很多场景下,使用代理的目的就是为了匿名,不让对方知道请求/响应的来源在哪儿。除了在测试环境分析技术问题的场景,现实业务中有需要在报文中携带层层代理信息的应用case吗?

    作者回复: 当然有了,互联网上很少有直连网站的,都要经过层层代理,这中间就免不了用代理协议。 很多代理并不是为了匿名,而是为了缓存。

    2020-06-21
    15
  • 火车日记
    1 补充几个,ip_hash 、最少连接数、最快连接数,根据场景应用 2 作为中转站,需要为上游和下游开启两个连接,大量并发请求,会出现性能瓶颈,应减少资源开销,加快响应速度,比如代理缓存,动静分离

    作者回复: great!

    2019-07-16
    12
  • Long
    老师好,文中 "服务器的 IP 地址应该是保密的,关系到企业的内网安全,所以一般不会让客户端知道。" 是不是可以认为,域名所对应的IP地址和真实服务器的IP地址是不一样的呢?因为真实服务器的地址一般都是私网的IP地址.

    作者回复: 这个里面其实很复杂,首先网站外面会有cdn,然后入口会有反向代理,再后面才可能是真实的业务服务器。 服务器也可以安装多个网卡,一个网卡对外,一个网卡对内,这样有两个ip地址,分别对外对内。

    2020-02-23
    8
  • lmingzhi
    老师,请问有什么检测http代理ip匿名性的手段? 是否只要检查请求头是否带有“X-Forwarded-For”和“X-Real-IP”及里面是否带有真实ip即可?

    作者回复: 如果代理比较“善良”,就会用“X-Forwarded-For”和“X-Real-IP”告知客户端的真实ip,如果它是完全匿名,不提供这些字段,我们也没有办法,因为它就是一个真实的客户端。

    2019-07-15
    5
  • Maske
    1.a 代理服务器与上下游的通信机制也是http协议,因此增加了传输中的数据泄漏和篡改风险,可以使用https解决。b 如果代理服务器发生故障,会影响客户端的正常访问,可以增加代理服务器的数量,并配置代理服务器负载均衡算法。c 由于多了代理服务器的请求响应过程,增加了从源客户端和源服务器之间的来回时间。 2.轮询,加权轮询,随机法,加权随机法,源地址哈希法,最小连接数法

    作者回复: 说的挺好,这段时间学习得很勤奋啊,也要适当休息。

    2020-06-17
    2
    4
  • Aaron
    『因为通过“X-Forwarded-For”操作代理信息必须要解析 HTTP 报文头,这对于代理来说成本比较高,原本只需要简单地转发消息就好,而现在却必须要费力解析数据再修改数据,会降低代理的转发性能。』 问:代理协议的 PROXY 不也是一个头吗?同样需要对 header 的操作。它的优势是不是只在于操作的内容比 "X-Forwarded-For" 少一点而已? 『另一个问题是“X-Forwarded-For”等头必须要修改原始报文,而有些情况下是不允许甚至不可能的(比如使用 HTTPS 通信被加密)』 问:为什么“X-Forwarded-For”等头必须要修改原始报文呢?不是很理解。烦请老师解释一下,谢谢。

    作者回复: 1.proxy头在第一行,结构很简单,而X-Forwarded-For在http头里,要有复杂的解析,特别是当http头很大的时候,成本就高了。 2.同样的原因,X-Forwarded-For在http头里,要修改就等于变动了原始的http报文,而proxy 协议是附加在外面的,不会改动原始报文。

    2020-05-29
    4
  • 1:你觉得代理有什么缺点?实际应用时如何避免? 代理代理就是找她人代替你去打理一些事情,让他人代办事情你必须交代好沟通好,那效率自然会低一些,另外,如果代理出问题了,那你的事自然也办不成了,所以,可能存在单点问题,不过一般还好。 2:你知道多少反向代理中使用的负载均衡算法?它们有什么优缺点? 随机——简单,是否均匀看随机情况 轮询(一般轮询、加权轮询)——相对简单,也会考虑机器资源和性能的均衡性 哈希(一般哈希、一致性哈希、带虚拟节点的一致性哈希)——相对复杂,要求越公平就会越复杂,而且适当考虑了请求 哈希槽,和redis类似 只有能使请求尽可能的高效分发就行,请教一下VPN和代理,本质是否差不多?

    作者回复: 1.对,代理的问题一个是成本,另一个就是信任。 2.最常用的就是这些了。 3.vpn和代理是两回事,它是一个虚拟的链路,有点像隧道,中间没有代理这样的角色,是直通的。

    2020-03-29
    4
  • AKA三皮
    代理是个好东西,比如各种精细化的流量控制,灰度发布,同时微服务拆分后,服务治理的相关功能也可以下沉到代理去做,比如 限流、熔断。选个高性能的网络代理是王道,比如envoy

    作者回复: 对,这个就是中间层的力量,也是软件开发的基本原则。

    2020-03-27
    3
收起评论
显示
设置
留言
51
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部