Appendice B. Analisi
Problemi con la convenzione "X-"
Il problema principale con la convenzione "X-" è che i parametri non standardizzati hanno la tendenza a trapelare nello spazio protetto dei parametri standardizzati, causando così problemi di interoperabilità.
Consideriamo l'esempio dei campi di intestazione della posta elettronica. Originariamente, [RFC822] distingueva tra "Extension-fields" standardizzati e "user-defined-fields" non standardizzati, con questi ultimi che dovevano utilizzare il prefisso "X-". Tuttavia, come notato in [RFC2822], questa distinzione è stata rimossa perché:
-
Molti campi "X-" sono diventati così ampiamente distribuiti da diventare standard de facto (ad esempio, "X-Mailer").
-
Il prefisso "X-" scoraggiava gli sviluppatori dal registrare correttamente i loro campi.
-
Quando gli sviluppatori volevano standardizzare un campo "X-", si trovavano di fronte a un dilemma: mantenere il prefisso "X-" (che suggerisce erroneamente che non è standardizzato) o rimuoverlo (il che compromette la compatibilità con le implementazioni esistenti).
-
Alcuni implementatori credevano erroneamente che qualsiasi campo senza prefisso "X-" fosse formalmente standardizzato, portando a problemi di interoperabilità.
Problemi simili si sono verificati in altri protocolli:
-
HTTP: Intestazioni come "X-Forwarded-For" sono diventate ampiamente distribuite ma difficili da standardizzare a causa del prefisso.
-
SIP: Il prefisso "P-" per le intestazioni private (destinate alle reti chiuse) è trapelato nell'Internet più ampio, come documentato in [RFC5727].
-
Tipi di media: Il prefisso "x-" per i tipi di media sperimentali ha portato agli stessi problemi, come documentato in [RFC4288].
Quando la segregazione potrebbe essere giustificata
In alcune situazioni, la segregazione dello spazio dei nomi dei parametri utilizzato in un dato protocollo applicativo può essere giustificata:
-
Quando è estremamente improbabile che alcuni parametri vengano mai standardizzati. In questo caso, i parametri specifici dell'implementazione e per uso privato potrebbero almeno incorporare il nome dell'organizzazione (ad esempio, "ExampleInc-foo" o, coerentemente con [RFC4288], "VND.ExampleInc.foo") o il nome di dominio primario (ad esempio, "com.example.foo" o un Uniform Resource Identifier [RFC3986] come "http://example.com/foo"). In rari casi, parametri veramente sperimentali potrebbero ricevere nomi privi di significato come parole senza senso, l'output di una funzione hash o Identificatori Universalmente Unici (UUID) [RFC4122].
-
Quando i nomi dei parametri potrebbero avere un significato significativo. Anche questo caso è raro, poiché gli implementatori possono quasi sempre trovare un sinonimo per un termine esistente (ad esempio, "urgency" invece di "priority") o semplicemente inventare un nome più creativo (ad esempio, "get-it-there-fast"). L'esistenza di più parametri con nomi simili può essere confusa, ma questo è vero indipendentemente dal tentativo di segregare i parametri standardizzati e non standardizzati (ad esempio, "X-Priority" può essere confuso con "Urgency").
-
Quando i nomi dei parametri devono essere molto brevi (ad esempio, come in [RFC5646] per i tag linguistici). In questo caso, può essere più efficiente assegnare numeri invece di nomi leggibili dall'uomo (ad esempio, come in [RFC2939] per le opzioni DHCP) e lasciare un certo intervallo numerico per estensioni specifiche dell'implementazione o uso privato (ad esempio, come con i numeri di codec utilizzati con il Session Description Protocol [RFC4566]).
Obiezioni alla deprecazione della convenzione "X-"
Ci sono tre obiezioni principali alla deprecazione della convenzione "X-" come best practice per i protocolli applicativi:
-
Gli implementatori potrebbero confondere un parametro con un altro parametro che ha un nome simile; una distinzione rigida come un prefisso "X-" può rendere ciò chiaro. Tuttavia, in pratica, gli implementatori sono costretti a sfumare la distinzione (ad esempio, trattando "X-foo" come uno standard de facto), quindi diventa inevitabilmente priva di significato.
-
Le collisioni sono indesiderabili, e sarebbe negativo che sia un parametro standardizzato "foo" che un parametro non standardizzato "foo" esistessero simultaneamente. Tuttavia, i nomi sono quasi sempre economici, quindi un nome sperimentale, specifico dell'implementazione o per uso privato "foo" non impedisce a un'organizzazione di sviluppo di standard di emettere un nome altrettanto creativo come "bar".
-
[BCP82] è intitolato "Assigning Experimental and Testing Numbers Considered Useful" e quindi implica che il prefisso "X-" sia anche utile per i parametri sperimentali. Tuttavia, BCP 82 affronta la necessità di numeri di protocollo quando il pool di tali numeri è strettamente limitato (ad esempio, opzioni DHCP) o quando un numero è assolutamente richiesto anche per scopi puramente sperimentali (ad esempio, il campo Protocol dell'intestazione IP). In quasi tutti i protocolli applicativi che utilizzano parametri di protocollo (incluse intestazioni di posta elettronica, tipi di media, intestazioni HTTP, parametri e proprietà vCard, URN e nomi di campi LDAP), lo spazio dei nomi non è limitato o vincolato in alcun modo, quindi non c'è bisogno di assegnare un blocco di nomi per uso privato o scopi sperimentali (vedere anche [BCP26]).
Conclusione
Pertanto, sembra che la segregazione dello spazio dei parametri in un'area standardizzata e un'area non standardizzata abbia pochi, se non nessuno, benefici e abbia almeno un costo significativo in termini di interoperabilità.