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