图解HTTP(二)中介和缓存

377 阅读5分钟

简介

当前章节是《rfc7230 - 2.3 中介》和《rfc7230 - 2.4 缓存》,介绍了代理、隧道、网关和缓存的相关知识。

本系列是在学习HTTP相关知识过程中,按照自己的理解以图文方式的记录。如果读者有不同的理解希望能够与我分享。若有差错,请斧正,我会第一时间修改,以免对读者的误导。

中介

HTTP使中介可以通过一系列连接来满足请求。有三种常见的的HTTP中介形式:代理、网关和隧道。一个独立的中介可能根据每个请求的性质扮演一个原服务器、代理。网关或者隧道。

image.png

每个参与这可能同时参与多个通讯。如下图,B可能从很多客户端接受请求而不仅是A,并(或)转发请求到其他服务器而不是C,同时在处理A的请求。

image.png

同样的,后续的请求可能通过一条不同的连接路径被发送,通常是基于静态配置的负载均衡。

上游和下游

所有的消息流从上游流向下游

image.png

入站和出站

入站是指朝向源服务器,出站是指朝向用户代理。

image.png

代理

是由客户端选择的消息转发代理,通常通过本地配置规则,用于接收某些类型的绝对URI的请求,并尝试通过HTTP接口翻译来满足这些请求。代理通常被用于以一个公共的中介聚合一个团体的HTTP请求以达到安全、注解服务或共享缓存。一些代理被设计成在转发时将选择的消息或有效载荷进行转换。

image.png

网关(反向代理)

是一种扮演一个出站连接的源服务器但转换收到的请求并转发他们入站到其他服务器或服务器组。网关通常用于封装传统或不可信的信息服务,通过“加速器”缓存提高服务器性能,并启用跨多台机器的HTTP服务分区或负载平衡。

image.png

所有应用于源服务器的HTTP要求也应用于出站通讯的网关。网关使用任何它想要的协议与入站服务器进行通信,包括HTTP规范之外的私有扩展。但是,希望与第三方HTTP服务器进行互操作的HTTP-to-HTTP网关应符合网关入站连接上的用户代理要求。

隧道

充当两个连接的盲中继器而不改变消息。一旦激活,隧道就不被认为是HTTP通信的一方,尽管该隧道可能已经由HTTP请求发起。当两者都消失时,隧道不复存在中继连接的两端均已关闭。

image.png 隧道用来通过中介扩展虚拟连接,例如何时传输层安全性(TLS)用于建立通过共享的防火墙代理进行机密通信。

拦截代理(透明代理或强制门户)

中介只考虑了那些作为HTTP通信的参与者。有一些中介在网络协议栈的低层发挥作用,以发送者无感知的或未许可的方式进行过滤或转发HTTP流量。网络中间人在协议层面难以区分中间人攻击,由于错误地违反了HTTP语义,常常引入安全缺陷或互操作性问题。

image.png

HTTP被定义为无状态协议,这意味着每个请求消息都可以被孤立地理解。许多实现依赖于HTTP的无状态设计,以便重用代理连接或在多个服务器之间动态调用负载平衡请求。因此,服务器不能假定同一连接上的两个请求来自同一个用户代理,除非连接是安全的并且是特定于该代理的。一些非标准的HTTP扩展被认为违反了这个要求,导致安全性和互操作性问题。

缓存

是一个先前的响应消息的本地存储和控制他的消息的存储、恢复和删除的子系统。一个缓存存储可缓存的响应以减少响应时间以及未来对相同请求的网络带宽的使用。任何的客户端或者服务器可以使用缓存,虽然一个服务器在充当隧道的时候不能使用缓存。

image.png

一个缓存的影响是,如果链中的其中一个参与者有一份缓存应用于请求,这将缩短请求、响应的链的长度。下面说明了如果B有一个缓存的拷贝,它是先前没有被UA或A缓存的请求从O(经过C)处获得的响应。

image.png

可缓存的

如果允许缓存存储响应消息的副本以用于回答后续请求,则响应是“可缓存的”。即使响应是可缓存的,当缓存的响应可用于特定请求时,客户端或源服务器也可能存在额外的约束。

在万维网和大型组织内部署了各种各样的架构和缓存配置。 这些包括用于保存跨海带宽的国家级缓存代理,广播或组播高速缓存条目的协作系统,用于离线或高延迟环境的预取缓存条目的归档等等。

image.png

文档地址

HTTP/1.1 rfc7230