透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

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

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

代理服务

“代理”这个词听起来好像很神秘,有点“高大上”的感觉。
但其实 HTTP 协议里对它并没有什么特别的描述,它就是在客户端和服务器原本的通信链路中插入的一个中间环节,也是一台服务器,但提供的是“代理服务”。
所谓的“代理服务”就是指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份:面向下游的用户时,表现为服务器,代表源服务器响应客户端的请求;而面向上游的源服务器时,又表现为客户端,代表客户端发送请求。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(20)

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

    作者回复: great!

    2019-07-15
    2
    11
  • 院长。
    老师后面会讲HTTP2.0吗

    作者回复: 安全篇后的飞翔篇有http/2和http/3。

    2019-07-16
    3
  • 业余草
    落下了不少课,今天补上

    作者回复: go on。

    2019-07-24
    1
  • FF
    haproxy 那个代理协议那一行要客户端自己加上去的 ?如果客户端把这个加到 x-forward-for 里面,不用代理协议,那不是也可以解决代理去修改头部的问题 ?重点都是客户端先加上去这些信息 。这样看代理协议没啥优势啊,或者不是为了解决减少中间代理再去修改头的问题 ?盼复,感谢。

    作者回复: 代理协议的那一行是代理服务器加的,客户端不需要参与。

    代理协议的优势是简单,比http头好解析好处理,这对于代理服务器来说就能够提高转发效率。

    你后面的理解基本正确。

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

    作者回复: great!

    2019-07-16
    1
  • 星星之火
    老师您好,请问综合考虑代理的各种情况(比如匿名代理,篡改请求头字段)之后,怎么才能保证在服务端获取客户端的真实ip呢?

    作者回复: 这个无法保证,协议里的字段都是可以改的,只能靠代理的良心。

    一般来说,用代理协议是比较可靠的。

    2019-07-16
    1
    1
  • lmingzhi
    老师,请问有什么检测http代理ip匿名性的手段?

    是否只要检查请求头是否带有“X-Forwarded-For”和“X-Real-IP”及里面是否带有真实ip即可?

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

    2019-07-15
    1
  • 夏目
    老师,微服务里的网关算不算一个增强版的代理服务器呢

    作者回复: 是的,可以算是一种微型的反向代理。

    2019-12-03
  • lfn
    2019-10-05, 打卡。

    作者回复: 假期也在努力学习,加油。

    2019-10-05
  • 小可爱(๑• . •๑)
    抓紧赶上
    2019-08-01
  • 龙宝宝
    文章中抓包的图片中 http/1.0和http/1.1怎么交替出现?

    作者回复: 代理服务器向后端发送请求使用的是HTTP/1.0,可以看一下源和目标的端口号,过滤一下就可以了。

    2019-07-29
  • Leon📷
    proxy协议的配置demo
     server {
        listen 10003 proxy_protocol;
        return '10003 server get ip: $remote_addr!\n';
      }可以直观感受下

    作者回复: nice。

    2019-07-21
  • 亚洲舞王.尼古拉斯赵四
    老师,我们平常说的翻墙是通过代理实现的吗?是在http请求的什么阶段代理上的呢?ss和ssr有什么区别呢?为什么能够翻越互联网长城?

    作者回复: 这个应该是vpn,不是简单的代理。

    话题比较敏感,就不多说了。

    2019-07-17
  • Leon📷
    前面的课程都好轻松,到这里突然感觉有点小压力了,代理proxy的课程陶辉老师的课nginx有讲过,说了缓解上游和下游的网速差异等等优化,当时一脸懵逼,不知道这玩意干啥的,学到这里才真正理解到,开源的方案都是为了解决实际应用场景的问题的,结合nginx的解决方案,应该都能解答代理的缺陷问题

    作者回复: nice。

    2019-07-17
  • Geek_d4dee7
    常听说的SLB是中间的这个代理么 老师

    作者回复: slb应该是server load balance吧,负载均衡设备,也可以算是一种代理,但有的不一定使用http协议。

    2019-07-16
  • Fstar
    代理服务器如何连接源服务器?用 http1.0 短连接的效率不太好吧?集群一般都是局域网吗?

    作者回复: 很多代理都是用1.0的,这个取决于代理自己,因为有缓存,所以短连接也不会太影响效率。

    集群有局域网的,也有广域网的。

    2019-07-15
  • 独步星空
    老师,方便的时候能参照着http结构,顺带介绍下https么

    作者回复: 安全篇里全都是https,很快就要到了。

    2019-07-15
  • 一步
    对于代理协议,也有点疑问。代理协议只是在请求行的前面加了一个客服端地址和服务器地址,而没有整个请求的代理链路,如果源服务器想看整个请求经过了哪些代理怎么去看呢?(这个代理服务器没有再去修改X-Forwarded-For)

    作者回复: 代理协议设计的目的就不是记录传输链路,因为这个已经被X-Forwarded-For做了。

    这样需求还是要用X-Forwarded-For字段。

    2019-07-15
  • 一步
    还出现了两个字段:“X-Forwarded-Host”和“X-Forwarded-Proto”,它们的作用与“X-Real-IP”类似,只记录客户端的信息,分别是客户端请求的原始域名和原始协议名。
    ——————————
    老师,对于这句话,有点疑问,X-Forwarded-Host只是真实客户端的host吗?类比X-Real-IP,真实客户端的Host不应该是X-Real-Host吗?有关Forwarded的头不应该都是代理链路所有的以逗号分开的信息吗?

    作者回复: 是的,X-Forwarded-Host的格式与X-Forwarded-For不同,它只有一个值,不是逗号列表。

    2019-07-15
  • Geek_54edc1
    1、代理会成为性能瓶颈,有单点问题

    作者回复: √

    2019-07-15
收起评论
20
返回
顶部