1、 代理(proxy)
一种特殊的网络服务,扮演了位于服务器和客户端的“中间人”角色,允许一个网络终端(如客户端)通过该服务与另一个网络终端(如服务器)进行非直接连接。一些网关、路由器等设备也具备代理功能。代理服务器有过滤作用(网关没有),有利于保障网络安全。
上图中,代理服务器既是客户端也是服务器。对与客户端来讲,代理相当于服务器,它负责接收客户端的请求并返回响应。同时,代理本身需要请求服务器资源,此时,代理相当于客户端,要向服务器发送请求并接收服务器的响应。
代理服务器的特点:
1 客户端和服务器都不知道彼此;
2 从客户端到代理服务器,从代理服务器到服务器,它们之间使用的通讯协议相同;
3 代理服务器解析请求,重新封装后发给服务器;然后对服务器的响应进行解析,经重新封装后发给客户端。
ps:代理不改变请求URI,每次通过代理服务器转发请求或响应时,会追加写入Via首部信息(Via是http通用首部字段,via目的是追踪报文传输路径)。代理服务器也能预先将资源的副本缓存在代理服务器上。当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。这可以减少访问外部网络的流量,节省带宽资源。
2、网关(gateway)
网关的工作机制与代理比较类似,作用就是对两个网络段中的使用不同传输协议的数据进行互相翻译转换。
网关服务器的特点:
1 客户端和服务器都不知道彼此;
2 从客户端到网关,从网关到服务器,它们之间使用的通讯协议是不同的;
3 网关解析请求,转换协议后再发送给服务器;然后对服务器的响应进行解析,经转换协议后发给客户端。
ps:网关没有任何过滤机制,只是把网络内的信息发送到网络外,有暴露内部信息的危险。
3、 隧道(Tunneling)
通过使用隧道可以在网络之间传递不同协议的数据帧或包。隧道协议会将数据帧或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递。被封装的数据包在网络上传递时经过的逻辑路径就是隧道。使用隧道是为了在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。
隧道的特点:
1 服务器与客户端是直接通信的;
2 允许数据从一个网络移动到另一个网络;
3 只关心流量的传输,不对承载的流量进行解析。
举一个例子理解网关和隧道:
假设在一个网络中,防火墙禁止端口443上的连接,因此网络中的用户无法访问使用HTTPS协议的网站。但是,防火墙允许端口80上的连接。网络中的用户想要访问该服务器有两种方法:一种是通过网关,一种是通过HTTP隧道。
(1)使用网关
该种方式由网关(而不是客户端)初始化远端HTTPS服务器的SSL会话,然后代表客户端执行HTTPS事务。响应会由网关接收并解密,然后通过(不安全)的HTTP传送给客户端。
该种方式有几个缺点:
客户端到网关之间的连接是非安全的HTTP;
尽管网关是已认证的主体,但客户端无法对远端服务器执行SSL客户端认证;
网关要支持完整的SSL实现。
(2)使用隧道
该种方式SSL流量被封装到一条HTTP报文中,并通过HTTP端口80上的连接发送,最后被解封为普通的SSL流量。
对于SSL隧道来说,无需在代理中实现SSL。SSL会话建立在产生请求的客户端和目的(安全的)Web服务器之间,中间的代理服务器只是将加密数据经过隧道传输,并不会在安全事务中扮演其他的角色。
大伙儿明没明白?明白了吧。
参考文档:https://blog.****.net/sjailjq/article/details/82287345