Passa al contenuto principale

2. Motivation for Replacing RFC 7540 Stream Priorities (Motivazione per sostituire le priorità di stream RFC 7540)

La priorità di stream RFC 7540 (vedere Sezione 5.3 di [RFC7540]) è un sistema complesso in cui i client segnalano dipendenze di stream e pesi per descrivere un albero sbilanciato. Ha sofferto di distribuzione limitata e interoperabilità ed è stato deprecato in una revisione di HTTP/2 [HTTP/2]. HTTP/2 mantiene questi elementi di protocollo al fine di mantenere la compatibilità cablata (vedere Sezione 5.3.2 di [HTTP/2]), il che significa che potrebbero ancora essere utilizzati anche in presenza di segnalazione alternativa, come lo schema descritto in questo documento.

Molte implementazioni di server RFC 7540 non agiscono sui segnali di priorità HTTP/2.

La prioritizzazione può utilizzare informazioni che i server hanno sulle risorse o sull'ordine in cui vengono generate le richieste. Ad esempio, un server, con la conoscenza di una struttura di documento HTML, potrebbe voler dare priorità alla consegna di immagini critiche per l'esperienza utente rispetto ad altre immagini. Con RFC 7540, è difficile per i server interpretare i segnali dai client per la prioritizzazione, poiché le stesse condizioni potrebbero risultare in segnalazioni molto diverse da client diversi. Questo documento descrive una segnalazione più semplice e più vincolata, che richiede meno interpretazione e consente meno variazione.

RFC 7540 non definisce un metodo che può essere utilizzato da un server per fornire un segnale di priorità agli intermediari.

La priorità di stream RFC 7540 è espressa rispetto ad altre richieste che condividono la stessa connessione nello stesso momento. È difficile incorporare tale progettazione in applicazioni che generano richieste senza conoscenza di come altre richieste potrebbero condividere una connessione, o in protocolli che non hanno forti garanzie di ordinamento tra gli stream, come HTTP/3 [HTTP/3].

Esperimenti da ricerca indipendente [MARX] hanno dimostrato che schemi più semplici possono raggiungere almeno caratteristiche di prestazioni equivalenti rispetto alle configurazioni RFC 7540 più complesse osservate nella pratica, almeno per il caso d'uso Web.

2.1. Disabling RFC 7540 Stream Priorities (Disabilitazione delle priorità di stream RFC 7540)

I problemi e le intuizioni esposti sopra hanno fornito la motivazione per un'alternativa alla priorità di stream RFC 7540 (vedere Sezione 5.3 di [HTTP/2]).

L'impostazione HTTP/2 SETTINGS_NO_RFC7540_PRIORITIES è definita da questo documento al fine di consentire agli endpoint di omettere o ignorare i segnali di priorità HTTP/2 (vedere Sezione 5.3.2 di [HTTP/2]), come descritto di seguito. Il valore di SETTINGS_NO_RFC7540_PRIORITIES deve (MUST) essere 0 o 1. Qualsiasi valore diverso da 0 o 1 deve (MUST) essere trattato come un errore di connessione (vedere Sezione 5.4.1 di [HTTP/2]) di tipo PROTOCOL_ERROR. Il valore iniziale è 0.

Se gli endpoint utilizzano SETTINGS_NO_RFC7540_PRIORITIES, devono (MUST) inviarlo nel primo frame SETTINGS. I mittenti non devono (MUST NOT) modificare il valore SETTINGS_NO_RFC7540_PRIORITIES dopo il primo frame SETTINGS. I ricevitori che rilevano una modifica possono (MAY) trattarla come un errore di connessione di tipo PROTOCOL_ERROR.

I client possono inviare SETTINGS_NO_RFC7540_PRIORITIES con un valore di 1 per indicare che non stanno utilizzando i segnali di priorità HTTP/2. Il frame SETTINGS precede qualsiasi segnale di priorità HTTP/2 inviato dai client, quindi i server possono determinare se devono allocare risorse alla gestione dei segnali prima che arrivino i segnali. Un server che riceve SETTINGS_NO_RFC7540_PRIORITIES con un valore di 1 deve (MUST) ignorare i segnali di priorità HTTP/2.

I server possono inviare SETTINGS_NO_RFC7540_PRIORITIES con un valore di 1 per indicare che ignoreranno i segnali di priorità HTTP/2 inviati dai client.

Gli endpoint che inviano SETTINGS_NO_RFC7540_PRIORITIES sono incoraggiati a utilizzare segnali di priorità alternativi (ad esempio, vedere Sezione 5 o Sezione 7.1), ma non c'è alcun requisito di utilizzare un tipo di segnale specifico.

2.1.1. Advice when Using Extensible Priorities as the Alternative (Consigli quando si utilizzano priorità estensibili come alternativa)

Prima di ricevere un frame SETTINGS da un server, un client non sa se il server sta ignorando i segnali di priorità HTTP/2. Pertanto, fino a quando il client non riceve il frame SETTINGS dal server, il client dovrebbe (SHOULD) inviare sia i segnali di priorità HTTP/2 che i segnali di questo schema di prioritizzazione (vedere Sezioni 5 e 7.1).

Una volta che il client riceve il primo frame SETTINGS che contiene il parametro SETTINGS_NO_RFC7540_PRIORITIES con un valore di 1, dovrebbe (SHOULD) smettere di inviare i segnali di priorità HTTP/2. Questo evita di inviare segnali ridondanti che si sa essere ignorati.

Allo stesso modo, se il client riceve SETTINGS_NO_RFC7540_PRIORITIES con un valore di 0 o se il parametro delle impostazioni era assente, dovrebbe (SHOULD) smettere di inviare frame PRIORITY_UPDATE (Sezione 7.1), poiché è probabile che quei frame vengano ignorati. Tuttavia, il client può (MAY) continuare a inviare il campo di intestazione Priority (Sezione 5), poiché è un segnale end-to-end che potrebbe essere utile ai nodi dietro il server a cui il client è direttamente connesso.