Passa al contenuto principale

Appendix A. Frequently Asked Questions (Domande frequenti)

A.1 Why Not JSON? (Perché non JSON?)

Le prime proposte di campi strutturati erano basate su JSON [RFC8259]. Tuttavia, vincolare il suo uso per adattarlo ai campi di intestazione HTTP richiedeva che mittenti e destinatari implementassero un'elaborazione aggiuntiva specifica.

Problemi con JSON

1. Problemi di canonizzazione

  • Grandi numeri (superano l'intervallo sicuro di JavaScript)
  • Oggetti con membri duplicati (comportamento non definito)

2. Stringhe Unicode

  • Potenziali problemi di interoperabilità nei confronti
  • Diverse rappresentazioni Unicode per lo stesso carattere

3. Profondità di nidificazione arbitraria

  • Impegni di memoria inappropriati
  • Necessità di limitarlo in qualche modo
  • Le implementazioni JSON esistenti non hanno tali limiti

4. Tentazione dell'implementazione

  • Difficile imporre vincoli aggiuntivi
  • Le persone tendono a utilizzare parser JSON sui valori dei campi

Conclusione

Queste preoccupazioni hanno portato all'adozione di un formato che richiede parser e serializzatori dedicati, poiché l'obiettivo principale era migliorare l'interoperabilità e semplificare l'implementazione.


Tabella comparativa

CaratteristicaJSONRFC 8941
Intervallo numericoIndefinitoChiaramente definito (15 cifre)
Precisione decimaleIndefinita3 cifre
UnicodePredefinitoSolo ASCII
ProfonditàIllimitataLimitata a 2 livelli
Chiavi duplicateNon definitoEsplicitamente vietato
Adattamento HTTPScarsoEccellente

Esempio pratico

Approccio JSON (problematico)

Example-Header: {"priority": 1, "timeout": 3.14159, "enabled": true}

Approccio RFC 8941 (raccomandato)

Example-Header: priority=1, timeout=3.142, enabled

Vantaggi: Definizione di tipo chiara, comportamento prevedibile, si adatta naturalmente a HTTP.