Skip to main content

13. Fairness (公平性)

通常,HTTP 实现依赖底层传输来维护竞争带宽的连接之间的公平性。当中介在客户端连接上接收 HTTP 请求时,它将它们转发到后端连接。根据中介如何在不同的后端连接上合并或拆分请求,不同的客户端可能会经历不同的性能。如果中介在转发请求时也使用优先级信号,这种差异可能会扩大。第 13.1 节和第 13.2 节讨论了这种不公平扩大的缓解措施。

相反,第 13.3 节讨论了服务器如何根据优先级信号有意为某些连接分配不平等的带宽。

13.1. Coalescing Intermediaries (合并中介)

当中介将来自多个客户端的 HTTP 请求合并到一个到后端服务器的 HTTP/2 或 HTTP/3 连接中时,源自一个客户端的请求可能携带指示比来自其他客户端的请求更高优先级的信号。

对于在中介后面运行的服务器来说,遵守 Priority 头字段值有时是有益的。例如,资源受限的服务器可能会推迟传输具有后台紧急度级别 (7) 的软件更新文件。然而,在最坏的情况下,多个客户端声明的优先级之间的不对称可能会导致发送到一个用户代理的所有响应被延迟,直到发送到另一个用户代理的所有响应都已发送完毕。

为了缓解这个公平性问题,服务器可以使用关于中介的知识作为其优先级排序决策中的另一个输入。例如,如果服务器知道中介正在合并请求,那么它可以避免完整地提供响应,而是分配带宽(例如,以循环方式)。如果受限资源是中介和用户代理之间的网络容量,这可以工作,因为中介缓冲响应并根据其实现的优先级排序方案转发块。

服务器可以通过配置确定请求是否来自中介,或者可以检查请求是否包含以下头字段之一:

  • Forwarded [FORWARDED]、X-Forwarded-For

  • Via(参见 [HTTP] 的第 7.6.3 节)

13.2. HTTP/1.x Back Ends (HTTP/1.x 后端)

内容分发网络 (Content Delivery Network, CDN) 基础设施在前端和后端支持不同的 HTTP 版本是很常见的。例如,面向客户端的边缘可能支持 HTTP/2 和 HTTP/3,而与后端服务器的通信使用 HTTP/1.1 完成。与连接合并不同,CDN 将请求"解复用"到后端的离散连接中。HTTP/1.1(或更早版本)不支持单个连接中的响应多路复用,因此不存在公平性问题。然而,后端服务器仍可以 (MAY) 使用客户端头进行请求调度。后端服务器应该 (SHOULD) 仅在该信息可以限定到单个最终客户端的情况下基于客户端优先级信息进行调度。身份验证和其他会话信息可能提供此可链接性。

13.3. Intentional Introduction of Unfairness (有意引入不公平性)

有时,降低一个连接相对于其他连接的传输优先级是有益的,尽管知道这样做会在连接之间以及因此在这些连接上服务的请求之间引入一定程度的不公平。

例如,服务器可能在仅传送后台优先级响应(例如软件更新映像)的连接上使用清道夫拥塞控制器。这样做会以延迟更新交付为代价提高其他连接的响应性。