---
Web 的结构组件概述
---

#### 目录

1. 前言
2. 代理
3. 缓存
4. 网关
5. 隧道 
6. Agent 代理

#### 前言

Web 的结构组件有以下几部分构成：

- 代理

  位于客户端和服务器之间的 HTTP 中间实体。

- 缓存

  HTTP 的仓库，使常用页面的副本可以保存在离客户端更近的地方。

- 网关

  连接其他应用程序的特殊 Web 服务器。

- 隧道

  对 HTTP 通信报文进行盲转发的特殊代理。

- Agent 代理

  发起自动 HTTP 请求的半智能 Web 客户端。

#### 代理

首先我们来看看 HTTP 代理服务器，这是 Web 安全、应用集成以及性能优化的重要组成模块。

如下图所示，代理位于客户端和服务器之间，接收所有客户端的 HTTP 请求，并将这些请求转发给服务器（可能会对请求进行修改之后转发）。对用户来说，这些应用程序就是一个代理，代表用户访问服务器。

![](https://i.loli.net/2019/06/21/5d0c8e85e5a2a56556.png)

出于安全考虑，通常会将代理作为转发所有 Web 流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。

#### 缓存

Web 缓存或代理缓存是一种特殊的 HTTP 代理服务器，可以将经过代理传送的常用文档复制保存起来。下一次请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。

![](https://i.loli.net/2019/06/21/5d0c90189caa012620.png)

客户端从附近的缓存下载文档会比远程 Web 服务器下载快得多。HTTP 定义了很多功能，使得缓存更加高效，并规范了文档的新鲜度和缓存内容的隐私性。

#### 网关

网关是一种特殊的服务器，作为其他服务器的中间实体使用。通常用于将 HTTP 流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。

例如，一个 HTTP/FTP 网关会通过 HTTP 请求接受对 FTP URI 的请求，但通过 FTP 协议来获取文档。得到的文档会被封装成一条 HTTP 报文，发送给客户端。

![](https://i.loli.net/2019/06/21/5d0c92c1769db59510.png)

#### 隧道

隧道是建立起来之后，就会在两条连接之间对原始数据进行盲转发的 HTTP 应用程序。HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数据，转发时不会窥探数据。

HTTP 隧道的一种常见用途是通过 HTTP 连接承载加密的安全套接字层（SSL）流量，这样 SSL 流量就可以穿过只允许 Web 流量通过的防火墙了。

#### Agent 代理

用户 Agent 代理（或者简称为 Agent 代理）是代表用户发起 HTTP 请求的客户端程序。所有发布 Web 请求的应用程序都是 HTTP Agent 代理。到目前为止，我们只提到过一种 HTTP Agent 代理：Web 浏览器，但用户 Agent 代理还有很多其他类型。