我们通常认为网络连接直接发生在客户端和服务器之间。但实际上网络请求从客户端发出后,会经过层层关卡到达服务器。服务器收到请求后,返回的响应依旧会经过层层关卡返回给客户端。本篇文章介绍了网络请求和响应会经过哪些关卡,以及这些关卡的作用分别是什么?
下面是本文的提纲:
代理
位于客户端和服务器之间的 HTTP 中间实体缓存
HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方网关
连接其他应用程序的特殊 Web 服务器隧道
对 HTTP 通信报文进行盲转发的特殊代理Agent 代理
发起自动 HTTP 请求的半智能 Web 客户端
1 - 代理
代理位于客户端和服务器之间,接受所有客户端的HTTP请求,并将这些请求转发给服务器。对于用户来说,这些应用程序就是一个代理,代表用户访问服务器。
1.1 代理服务器的部署
a. 出口代理
可以将代理固定在本地网络的出口点,以便控制本地网络与大型因特网之间的流量。可以在公司网络中使用代理,提供针对公司外部恶意黑客的防火墙保护。b. 访问(入口)代理
代理常被放在ISP(Internet Service Provider)访问点上,用以处理来自客户的聚合请求。ISP使用缓存代理来存储常用文档的副本,以提高用户的下载速度,降低因特网带宽耗费。
c. 反向代理
外部所有的请求都会发送给代理,代理转发给某台服务器。在这里,代理可以进行负载均衡,把请求分配给空闲或者处理能力强的机器,也可以进行统一安全性检查。d. 网络交换代理
通过缓存来减轻因特网节点的拥塞,并对流量进行监视。
2 - 缓存
Web缓存(Web cache)或代理缓存(proxy cache)是一种特殊HTTP代理服务器,可以将经过代理传送的常用文档复制保存下来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。这样做的目的是因为客户端从附近的缓存下载文档会比从远程Web服务器下载快得多。
2.1 缓存处理请求的过程
Web缓存的基本工作原理大多很简单,对一条HTTP GET报文的基本缓存处理过程包括以下7个步骤(如图所所示):
- 接收——缓存从网络中读取抵达的请求报文
- 解析——缓存对报文进行解析,提取出URL和各种首部
- 査询——缓存査看是否有本地副本可用,如果没有,就获取一份副本,并将其保存在本地
- 新鲜度检测——缓存査看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新
- 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文
- 发送——缓存通过网络将响应发回给客户端
- 日志——缓存可选地创建一个日志文件条目来描述这个事务
3 - 网关
网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换为其他的协议。网关接受请求时就好像自己是资源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。
例如,一个HTTP/FTP网关会通过HTTP请求接受对FTP URI的请求,但通过FTP协议来获取文档。得到的文档会被封装成一条HTTP报文,发送给客户端。
网关和代理的区别是,代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。
3.1 网关的3个实例
下图显示了三个网关的示例:
- 在图a中,网关收到了对FTP URL的HTTP请求。然后网关打开FTP连接,并向FTP服务器发布适当的命令。然后将文档和正确的HTTP首部通过HTTP回送;
- 在图b中,网关通过SSL收到了一条加密的Web请求,网关会对请求进行解密,然后向目标服务器转发一条普通的HTTP请求。可以将这些安全加速器直接放在(通常处于同一场所的)Web服务器前面,以便为原始服务器提供髙性能的加密机制;
- 在图c中,网关通过应用程序服务器网关API,将HTTP客户端连接到服务器端的应用程序上去。在网上的电子商店购物,査看天气预报,或者获取股票报价时,访问的就是应用程序服务器网关。这也是网关最常见的用途,客户端无须关注服务器实现,只需要按照API或CGI发送规定格式的内容,就可以获取相应的内容。
4 - 隧道
隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的 HTTP 应用程序。HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数据,转发时不会窥探数据。HTTP 隧道的一种常见用途是通过 HTTP 连接承载加密的安全套接字层(SSL, Secure Sockets Layer)流量,这样 SSL 流量就可以穿过只允许 Web 流量通过的防火墙了。
如图所示,HTTP/SSL 隧道收到一条 HTTP 请求,要求建立一条到目的地址和端口的输出连接,然后在 HTTP 信道上通过隧道传输加密的 SSL 流量,这样就可以将其盲转发到目的服务器上去了。
5 - Agent代理
用户 Agent 代理(或者简称为 Agent 代理)是代表用户发起 HTTP 请求的客户端程序。所有发布 Web 请求的应用程序都是 HTTP Agent 代理。到目前为止,我们只提到过一种 HTTP Agent 代理:Web 浏览器,但用户 Agent 代理还有很多其他类型,比如网络爬虫。
爬虫属于Web机器人,而得到最广泛使用的Web机器人都是因特网搜索引擎。因特网搜索引擎可以帮助用户找到世界范围内涉及任意主题的文档。
大家好,我是彬彬酱,目前在腾讯从事Web后端开发。
菜鸟必知的 http 知识专题整理了关于网络的基础知识,适合大家进行入门级学习,这个专题现包含下列文章:
菜鸟必知的 http 知识(一)—— TCP 握手协议
菜鸟必知的 http 知识(二)—— HTTP 协议特点
菜鸟必知的 http 知识(三)—— 请求和响应报文
菜鸟必知的 http 知识(四)—— HTTP 和 HTTPS
菜鸟必知的 http 知识(五)—— 新技术的出现
菜鸟必知的 http 知识(六)—— web的结构组件