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
- 1. Introduction
- 1.1 Intentionally Strict Processing
- 1.2 Notational Conventions
- 2. Defining New Structured Fields
- 3. Structured Data Types
- 3.1 Lists
- 3.2 Dictionaries
- 3.3 Items
- 4. Working with Structured Fields in HTTP
- 4.1 Serializing Structured Fields
- 4.2 Parsing Structured Fields
- 5. IANA Considerations
- 6. Security Considerations
- 7. References
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
- Testo ufficiale: RFC 8941 (TXT)
- Pagina ufficiale: RFC 8941 DataTracker
- Errata: RFC Editor Errata
- RFC correlati:
- RFC 7230 - Sintassi dei messaggi HTTP/1.1
- RFC 8942 - Client Hints (usa Structured Fields)
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