HTTP协议探究(二):代理、网关和隧道
一 复习与目标
1 复习
- 缓存目的:减轻服务器压力,不重复请求相同的内容
- 缓存位置:浏览器或中间代理
- 相关状态码:200或403
- 相关首部:
- etag和since-none-match、last-modified和if-modified-since
- cache-control:
- private public
- max-age s-maxage
- must-revalidate proxy-revalidate
- 缓存的处理流程(中间代理和浏览器)
2 目标
- 缓存:代理服务器或者浏览器本地磁盘内保存的资源副本。
- 缓存服务器是代理服务器的一种。
- 与HTTP协作的Web服务器的角色:代理 网关 隧道。
二 概述
1 代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。(相同协议,如:HTTP,版本可以不同)
2 网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。(不同协议,如:客户端 --HTTP---> 网关 --POP---> 邮箱服务器)
3 隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。(HTTP应用程序发送非HTTP的流量)
注:上面的描述还是很抽象,后面讲解完就清楚了。
三 代理
1 代理的作用
- 过滤器:过滤掉某些IP的访问
- 文档访问控制:限制某些文档的访问
- 安全防火墙:阻止SQL注入、阻止OS注入等(Nginx + lua)
- Web缓存:响应存入本地,不需要重复获取。
- 反向代理:接收真实请求,转发给内部网络上的服务器。
- 负载均衡:根据网络流量状况把请求导向给特定的服务器。
- 转码器:修改内容的主体格式,如:传输gif时,转换成jpeg。
- 匿名者:删除身份特征(如:cookie、Ip),从而提供高度私密性。
2 代理主要内容
(1)代理服务器部署
- 正向代理(出口代理):客户端 -> 内网 -> 代理 -> 外网 -> 服务器,如:VPN
- 反向代理(入口代理):客户端 -> 外网 -> 代理 -> 内网 -> 服务器,如:防火墙
- 网络交换代理:客户端 -> 外网 -> 代理 -> 外网 -> 服务器,如:缓存服务器
(2)层次结构
- 多级代理,如:客户端 -> 代理1 -> 代理2 -> 代理3 -> 服务器
(3)请求如何到达代理?
- 客户端配置(如:科学上网)
- 修改网络:拦截代理
- DNS修改:域名 -> 服务器IP 改为 域名 -> 代理IP ->服务器IP
- Web服务器修改:响应重定向命令,即:客户端 -> 服务器 --305-> 客户端 -> 代理
3 追踪报文:via首部

- via格式:(协议名) (协议版本) 节点名 (节点注释),括号内为可选项
- 节点名:处于隐私的原因,可被隐藏,修改为假名替换
四 网关
1 常见的网关
- 协议网关:如客户端 --HTTP--> 网关 --FTP--> ftp服务器
- 资源网关:CGI(通用网关接口)
2 协议网关
(1)HTTP/*网关:HTTP ->其他协议的网关

注:常见的有HTTP/TCP,即外部使用Rest API,内部使用RPC(可为TCP)
(2)HTTPS/HTTP网关:HTTPS->HTTP的网关

- 外网使用HTTPS保证安全,内部使用HTTP保证高效。
3 资源网关:CGI
- CGI是一个标准接口集,Web服务器用它来装载程序以响应特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送。
- 起初CGI为每个请求建立一个进程,处理完成后销毁,后面这个开销太大,出现了快速CGI。
- 快速CGI启动一个守护进程,并且使用开销更小的线程来代替进程去处理请求。
五 隧道
1 概述
- 隧道使得HTTP应用程序可以发送非HTTP流量
- 用于穿透只允许Web流量通过的防火墙
2 建立连接:参考RFC2817
# 请求报文
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
# 响应报文
HTTP1.1 200 Connection Established
3 SSL隧道

- 代理没有实际服务器的私钥(到时讲解SSL就知道了),无法建立SSL/TLS连接
- 所以代理不再作为中间人,即不再改写请求内容,而是将数据原样传输给下一层代理(这也说明了SSL能够防止报文被篡改)。
参考:
- RFC2616 RFC2817
- https://www.zhihu.com/question/21955083
- 《图解HTTP》
- 《HTTP权威指南》
HTTP协议探究(二):代理、网关和隧道的更多相关文章
- HTTP协议复习二--代理
代理(Proxy)是HTTP协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客 户端的请求,也可以转发服务器的应答.代理有很多的种类,常见的有:1.匿名代理:完全“隐匿”了被代理的机器, ...
- 《图解HTTP》读书笔记(七:通信数据转发程序-代理/网关/隧道)
HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理.网关和隧道,它们可以配合服务器工作.这些服务器和应用程序可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服 ...
- 与http协作的web服务器--代理、网关、隧道
一台服务器可以搭建多个web站点 代理: 接受客户端发送的请求,转发给其他服务器,然后接受服务器的返回结果(响应)再返回给客户端.每次经过代理服务器,就会追加写入via首部信息. 按两种基准分类.一种 ...
- HTTP_5_通信数据转发程序:代理、网关、隧道
HTTP通信时,除客户端和服务器之外,还有一些用于通信数据转发的应用程序,例如代理,网关,隧道.配合服务器工作. 代理 转发功能,客户端与服务器之间可有多个代理, 缓存代理:减少服务器压力,透明代理: ...
- 与HTTP协作的Web服务器——代理、网关、隧道
1.虚拟主机 (1)HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点: (2)在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站,即当请求发送到服务器时,已经是以IP ...
- HTTP协议探究(六):H2帧详解和HTTP优化
一 复习与目标 1 复习 HTTP1.1存在的问题 HTTP2.0要兼容HTTP1.1 HTTP2.0的重要概念 分帧层 二进制:流 消息 帧 流的状态.优先级和并发 流量控制 服务器推送 首部压缩 ...
- HTTP第八、九章之网关、隧道、web机器人
网关 网关(gateway): 资源和应用程序之间的粘合剂.应用程序可以(通过HTTP或其它已定义的接口)请求网关来处理某条请求,网关可以提供一条响应.网关可以向数据库发送查询语句,或者生成动态的内容 ...
- 前端学HTTP之网关、隧道和中继
前面的话 Web是一种强大的内容发布工具.人们已经从只在网上发送静态的在线文档,发展到共享更复杂的资源,比如数据库内容或动态生成的HTML页面.Web浏览器为用户提供了一种统一的方式来访问因特网上的内 ...
- HTTP协议(二)header标头说明
HTTP协议(二):header标头说明 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从 ...
随机推荐
- vs.net2017在编辑的wpf的xaml文件引用本程序集下的类提示“找不到”
local对应就是当前exe程序下的类,会提示“...命令空间...找不到...” 因为我调整过生成的,于是尝试调回来anyCPU 问题解决. 看了一下vs.net2017的所在目录"C:\ ...
- 第11组 Alpha冲刺(5/6)
第11组 Alpha冲刺(5/6) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11898559.html 作业博客 https://edu ...
- 定位ScheduledExecutorService过了一段时间不执行问题
今天查看生产环境的sentinel控制台,发现某dubbo应用一共5个节点,有3个失联了. 查看失联节点的应用日志,服务没有挂,各dubbo接口的日志正常在打印. 在应用节点ping/telnet s ...
- [Java复习] Spring Boot
什么是Spring Boot? 传统SSH/SSM框架配置繁琐,有很多重复的模板配置,效率不高. Spring Boot快速创建可独立运行,生产级别的Spring应用程序. 主要是基于Spring家族 ...
- MySQL SSL配置(mysql5.7和mysql5.6)
专题一:mysql5.7上开启并配置ssl [root@mysqlmaster01 bin]# ./mysql_ssl_rsa_setup --datadir=/data/mysql_data1/ - ...
- Qt编写数据可视化大屏界面电子看板8-调整间距
一.前言 在数据可视化大屏界面电子看板系统中,前期为了使用目标客户机,调整间距是必不可少的工作,QMainWindow中的QDockWidget,会默认生成布局和QSplitter调整宽高大小,鼠标移 ...
- The input file should be UTF8 without a byte-order-mark(BOM)
byte-order-mark = (BOM) 在unicode诸编码中,字节顺序标记-BOM被用于标记编码高低位的顺序. .BOM是一个特殊的unicode字符.早期标准定义其为“零长度.非断行的空 ...
- html5新增的语义化标签极其作用
在html5中,新增了几个语义化标签:<article>.<section>.<aside>.<hgroup>. <header>,< ...
- windows下编译配置libnet-1.2-rc3
1.下载winpcap(一个底层驱动,可以嗅探.过滤网卡数据包,发包).exe安装包,傻瓜一步式安装 2.下载WpdPack_4_1_2,这个是winpcap的开发者包,解压之后只需要配置相关路径. ...
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
[编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...