13. Fairness (Equità)
Tipicamente, le implementazioni HTTP dipendono dal trasporto sottostante per mantenere l'equità tra le connessioni in competizione per la larghezza di banda. Quando un intermediario riceve richieste HTTP su una connessione client, le inoltra alle connessioni backend. A seconda di come l'intermediario unisce o divide le richieste tra diverse connessioni backend, client diversi possono sperimentare prestazioni diverse. Questa varianza può essere amplificata se l'intermediario utilizza anche segnali di priorità durante l'inoltro delle richieste. Le Sezioni 13.1 e 13.2 discutono le mitigazioni per questa amplificazione dell'iniquità.
Al contrario, la Sezione 13.3 discute come un server può intenzionalmente allocare larghezza di banda diseguale a determinate connessioni in base ai segnali di priorità.
13.1. Coalescing Intermediaries (Intermediari di coalescenza)
Quando un intermediario unisce le richieste HTTP di più client in una connessione HTTP/2 o HTTP/3 verso un server backend, le richieste che provengono da un client potrebbero portare segnali che indicano una priorità più alta rispetto alle richieste di altri client.
A volte è vantaggioso per i server in esecuzione dietro intermediari obbedire ai valori del campo di intestazione Priority. Ad esempio, un server con risorse limitate potrebbe differire la trasmissione di file di aggiornamento software con un livello di urgenza di background (7). Tuttavia, nel peggiore dei casi, l'asimmetria tra le priorità dichiarate da più client potrebbe causare il ritardo di tutte le risposte destinate a un user agent fino a quando tutte le risposte destinate a un altro user agent non siano state inviate nella loro interezza.
Per mitigare questo problema di equità, i server possono utilizzare la conoscenza degli intermediari come un altro input nelle loro decisioni di prioritizzazione. Ad esempio, se un server sa che l'intermediario sta unendo le richieste, può evitare di servire le risposte nella loro interezza e allocare invece larghezza di banda (ad esempio, in modo round-robin). Questo può funzionare se la risorsa vincolata è la capacità di rete tra l'intermediario e gli user agent, poiché l'intermediario bufferizza le risposte e inoltra i chunk secondo lo schema di prioritizzazione che implementa.
Un server può determinare che una richiesta proviene da un intermediario tramite configurazione, oppure può verificare se la richiesta include uno dei seguenti campi di intestazione:
-
Forwarded [FORWARDED], X-Forwarded-For
-
Via (vedere Sezione 7.6.3 di [HTTP])
13.2. HTTP/1.x Back Ends (Backend HTTP/1.x)
È comune per l'infrastruttura Content Delivery Network (CDN) supportare diverse versioni HTTP sul front-end e sul back-end. Ad esempio, un edge rivolto al client potrebbe supportare HTTP/2 e HTTP/3 mentre la comunicazione con i server backend viene effettuata utilizzando HTTP/1.1. A differenza della coalescenza delle connessioni, un CDN "demultiplexa" le richieste a connessioni discrete verso i backend. HTTP/1.1 (o precedenti) non supporta il multiplexing delle risposte all'interno di una singola connessione, quindi non c'è problema di equità. Tuttavia, i server backend possono (MAY) ancora utilizzare le intestazioni client per la pianificazione delle richieste. I server backend dovrebbero (SHOULD) pianificare in base alle informazioni sulla priorità del client solo quando tali informazioni possono essere limitate a un singolo client finale. L'autenticazione e altre informazioni di sessione potrebbero fornire questa collegabilità.
13.3. Intentional Introduction of Unfairness (Introduzione intenzionale di iniquità)
A volte è vantaggioso deprioritizzare la trasmissione di una connessione rispetto ad altre, sapendo che ciò introduce un grado di iniquità tra le connessioni e, quindi, tra le richieste servite su tali connessioni.
Ad esempio, un server potrebbe utilizzare un controller di congestione scavenger su connessioni che trasportano solo risposte di priorità di background (ad esempio, immagini di aggiornamento software). Ciò migliora la reattività di altre connessioni a costo di ritardare la consegna degli aggiornamenti.