Passa al contenuto principale

RFC 8941 - Structured Field Values for HTTP

  • Stato: Proposed Standard
  • Pubblicato: February 2021
  • Stream: IETF
  • Sostituito da: RFC9651
  • Errata: Nessun errata

Abstract​

Questo documento descrive un insieme di tipi di dati e di algoritmi associati pensati per rendere più semplice e sicura la definizione e l'elaborazione dei campi header e trailer HTTP, detti "Structured Fields", "Structured Headers" o "Structured Trailers". Si applica alle nuove specifiche di campi HTTP che desiderano usare una sintassi comune più rigorosa rispetto ai valori dei campi HTTP tradizionali.


Stato di Questo Memo​

Questo documento è un Internet Standards Track document.

Questo documento è un prodotto dell'Internet Engineering Task Force (IETF). Rappresenta il consenso della comunità IETF. Ha ricevuto revisione pubblica ed è stato approvato per la pubblicazione dall'Internet Engineering Steering Group (IESG). Ulteriori informazioni sugli Internet Standard sono disponibili nella Sezione 2 di RFC 7841.

Le informazioni sullo stato corrente di questo documento, su eventuali errata e sulle modalità per inviare feedback sono disponibili all'indirizzo https://www.rfc-editor.org/info/rfc8941.


Indice​

Appendici​


Riferimento Rapido ai Concetti Chiave​

Tre tipi di dati di primo livello​

1. List          - sequenza ordinata di elementi
2. Dictionary - mappa non ordinata di coppie chiave-valore
3. Item - valore singolo

Sei tipi di dati di base​

1. Integer       - intervallo: da -999,999,999,999,999 a 999,999,999,999,999
2. Decimal - al massimo 3 cifre decimali
3. String - testo racchiuso tra doppi apici
4. Token - identificatore non racchiuso tra apici
5. Byte Sequence - dati binari codificati in Base64
6. Boolean - ?1 (true) o ?0 (false)

Esempi​

List​

Example-List: "foo", "bar", baz
Example-List: 1, 2, (a b c)

Dictionary​

Example-Dict: a=1, b=2
Example-Dict: key="value", flag

Item​

Example-Integer: 42
Example-String: "hello world"
Example-Token: application/json
Example-Boolean: ?1

Importanza​

RFC 8941 è una specifica centrale per l'infrastruttura HTTP moderna ed è ampiamente usata in:

1. Header HTTP/2 e HTTP/3​

  • Molti nuovi header HTTP usano il formato Structured Fields
  • Codifica binaria più efficiente

2. Client Hints (RFC 8942)​

Sec-CH-UA: "Chromium";v="93", " Not;A Brand";v="99"
Sec-CH-Viewport-Width: 1024
Sec-CH-DPR: 2

3. CDN e controllo della cache​

CDN-Cache-Control: max-age=3600, s-maxage=7200

4. Funzionalità Web moderne​

  • Cross-Origin Resource Policy (CORP)
  • Cross-Origin Embedder Policy (COEP)
  • Molti header relativi alla sicurezza

Perche Servono gli Structured Fields?​

Problemi degli header HTTP tradizionali​

# Campi diversi usano sintassi diverse:
Cache-Control: max-age=3600, private
Accept: text/html, application/json;q=0.9
Link: `https://example.com`; rel="preload"

# Ogni campo richiede un parser personalizzato
# Facile sbagliare, difficile da mantenere

Vantaggi degli Structured Fields​

# Sintassi e regole di parsing uniformi
Structured-Header: a=1, b=2, c=(x y z)

# Vantaggi:
+ tipi di dati standardizzati
+ algoritmi di parsing espliciti
+ migliore interoperabilita
+ supporto a ottimizzazioni future, come la codifica binaria di HTTP/3

Principi di Progettazione​

1. Rigorosita intenzionale​

  • Un errore di parsing causa un errore immediato, senza tentare di "riparare" l'input
  • Evita ambiguita e problemi di sicurezza
  • Favorisce l'interoperabilita

2. Compatibilita in avanti​

  • Il modello dati astratto e la serializzazione sono separati
  • In futuro possono essere definite serializzazioni più efficienti

3. Priorita alla praticita​

  • Basato sull'esperienza pratica con i campi HTTP esistenti
  • Bilancia capacita espressiva e complessita

Esempio Rapido​

Definizione di un nuovo Structured Header​

Supponiamo di voler definire un header "Example-Priorities":

Definizione della specifica:
---------------------------
L'header Example-Priorities e uno Structured Field.
Il suo valore deve essere un Dictionary.
Le chiavi del Dictionary sono identificatori di risorsa (token),
mentre i valori sono priorita (integer).

Esempio:
--------
Example-Priorities: css=10, js=5, images=1

Parsing e uso​

// Esempio di pseudocodice
const header = "css=10, js=5, images=1";
const dict = parseDictionary(header);

console.log(dict.get('css')); // 10
console.log(dict.get('js')); // 5
console.log(dict.get('images')); // 1

Risorse Correlate​


Destinatari​

  • Autori di specifiche HTTP: uso durante la definizione di nuovi header HTTP
  • Implementatori di browser: implementazione degli algoritmi di parsing e serializzazione
  • Sviluppatori di CDN e proxy: gestione di header HTTP moderni
  • Sviluppatori Web: comprensione del formato degli header HTTP moderni